拷貝建構函式是一種特殊的建構函式,函式的名稱必須和類名稱一致,它必須的乙個引數是本型別的乙個引用變數。 作用就是用來複製物件,在使用這個物件的例項來初始化這個物件的乙個新的例項。類中可以存在多個拷貝建構函式。
#includeusing namespace std;
class cexample
cexample(const cexample & c)
~cexample()
void show()
//拷貝建構函式
cexample(const cexample & c)
//析構函式
~cexample()
void show()
main函式將要退出時,拷貝類t2的析構函式先得到執行,它把自身p指向的堆空間釋放了;接下來,t1的析構函式得到呼叫,被拷貝類t1的析構函式得到呼叫,它同樣要去析構自身的p指向指向的堆空間,但是該空間和t2類中p指向的空間一樣,造成重複釋放,程式執行崩潰。
解決辦法十分簡單,自定義拷貝建構函式,裡面用深度拷貝的方式為拷貝類初始化:
class testcls{
public:
int a;
int *p;
public:
testcls()
{std::cout<<"testcls()"《自定義拷貝建構函式,並設定為private屬性,其實現體可以什麼都不寫,那麼這個類將變成乙個不可被複製的類了。
拷貝建構函式,深拷貝與淺拷貝
一.拷貝建構函式 先直接來看 include include help.h using namespace std class line private char msg line line const char msg line line const line line line line voi...
拷貝建構函式淺拷貝深拷貝
1 函式的引數為類物件且引數採用值傳遞方式 2 將類物件做為函式的返回值。2.淺拷貝 所謂淺拷貝,指的是在物件複製時,只對物件中的資料成員進行簡單的賦值 預設拷貝建構函式執行的也是淺拷貝。大多情況下 淺拷貝 已經能很好地 工作了,但是一旦物件存在了動態成員,那麼淺拷貝就會出問題了,讓我們考慮如下一段...
拷貝建構函式,深拷貝,淺拷貝
深淺拷貝的區別 淺拷貝是將原始物件中的資料型字段拷貝到新物件中去,將引用型字段的 引用 複製到新物件中去,不把 引用的物件 複製進去,所以原始物件和新物件引用同一物件 新物件中的引用型字段發生變化會導致原始物件中的對應欄位也發生變化。line line const line obj 深拷貝是在引用方...