拷貝建構函式使用情況

2021-04-13 13:00:59 字數 776 閱讀 6438

在c++中,有乙個拷貝建構函式的概念,當乙個物件通過建構函式初始化之後,如果需要乙個和它一樣的物件,這個物件是臨時的,比如:1 函式返回乙個物件,這個物件就是乙個拷貝;2 物件做函式的形參,傳過來的實參物件就是乙個拷貝。3 用乙個同類物件去初始化另乙個物件時候,point a(1,2),point b(a). b物件就是通過拷貝建構函式產生的。

一般來說,拷貝建構函式是預設的,系統會自動呼叫,如果要新建乙個和乙個物件有一點不同的物件,也就是說在這個物件的基礎上再改造一下,那麼就要自己親自寫拷貝建構函式。或者,類的資料成員中有指標型別時,預設的建構函式只能實現乙個淺拷貝,要實現乙個深拷貝必須自己書寫拷貝建構函式。

拷貝建構函式的格式:

point(point &p)

關於淺拷貝和深拷貝,如果我們要把乙個陣列物件a,使用系統預設的拷貝建構函式初始化b,如下**:

template

array::array(const array&x)

void main()

這樣的話,b物件就是a物件乙個淺拷貝,也就是說,a,b公用一段記憶體快,這樣會造成很大的問題,如果做析構的時候,a,b所佔的記憶體區域將被釋放2次,這會引起錯誤。為了避免這種錯誤,應該自定義拷貝建構函式,**如下:

template

array::array(const array&x)

t* srcptr = x.alist;

t* destptr = alist;

while(n--)

}這樣就構造了另一塊記憶體區域,和a是一樣的,只是儲存在不同的地方。這就是深拷貝。

ExecutorService使用情況

1 executorservice是是乙個介面,繼承了executor 2 而executor亦是乙個介面,該介面只包含了乙個方法void execute runnable command 3 executors 該類是乙個輔助類,此包中所定義的 executor executorservice s...

前端This使用情況

一 普通函式的this指向window。二 物件方法中this指向呼叫者。三 建構函式中this。1 function newperson name,age const p1 new person 張三 18 return的內容為基本資料型別為p1,return的內容為引用資料型別為其本身 cons...

檢測USB使用情況

此方法放在任何地方,都可以正常.procedure tform1.usb var msg tmessage const dbt devicearrival 8000 dbt deviceremovecomplete 8004 dbt devnodes changed 0007 begin case ...