作為物件導向語言,類的使用必不可少,構造引數自然也就無可避免。下面總結一下c++中的copy建構函式,在這之前需要了解淺拷貝和深拷貝的區別。
copy建構函式的形式:
//copy建構函式,形參的實行必須是const type& name
classtype (const classtype& cs);
copy建構函式的作用是使用乙個物件去初始化另外乙個物件,如果不寫系統會自動提供乙個copy建構函式,但這個copy建構函式只是進行淺拷貝,當類中的屬性是複雜型別是會出現一些意料之外的問題。
class name
//copy建構函式
name(const name &myname)
~name() }
};
對於上面這個類,如果沒有自己的copy建構函式,當進行下面這個操作,在析構這兩個物件時程式會出現coredump;
name name1("jhsdgfh");
name name2 = name1;
這是因為/呼叫c++提供的預設copy建構函式,只是進行淺拷貝,只是將name1內的值拷貝乙份放到name2棧記憶體中,兩個物件中的p指標所指向的位址都是同乙個塊位址。而在析構時析構name2後,p所指向的記憶體空間已經被析構。再析構name1是,由於p所指的記憶體空間已被析構,所以出現coredump
所以要自己寫copy建構函式,完成深拷貝,在初始化乙個物件時另開闢出一塊單獨儲存空間存放;這樣就避免上述問題的出現。
ps:有點繞希望日後自己還能看的明白
拷貝建構函式 深cop與淺copy
在乙個類物件的定義過程中,物件初始化分為兩種 1 直接初始化,要求編譯器使用普通的函式匹配,選擇我們提供的最匹配的建構函式,2 拷貝初始化,要求編譯器將右側運算物件拷貝到正在建立的物件中,通常使用拷貝建構函式來完成。直接初始化,使用string的建構函式string size t n,char c ...
C 中拷貝建構函式及深拷貝和淺拷貝
1 拷貝建構函式 先看個簡單的例子 includeusing namespace std class test void print 2 深拷貝和淺拷貝 在某些情況下 如果類中包含了指標 類內成員變數需要動態開闢堆記憶體,如果實行位拷貝 即淺拷貝 也就是把物件裡的值完全複製給另乙個物件,如obj1 ...
C 拷貝建構函式 深拷貝,淺拷貝
對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。執行程式,螢幕輸出100。從以上 的執行結果可以看出,系統為物件b分配了記憶體並完成了與物件a的複製過程。就...