c c 拷貝控制 建構函式的問題

2022-05-18 01:22:11 字數 644 閱讀 2058

問題1:下面①處的**注釋掉後,就編譯不過,為什麼???

問題2:但是把②處的也注釋掉後,編譯就過了,為什麼???

編譯錯誤:

001.cpp: in copy constructor 『test::test(const test&)』:

001.cpp:21:22: error: no matching function for call to 『int::int()』

test(const test& t)---->①

int(int i):mi(i)

int(const int& tmp)

~int(){}

};class test

test(const test& t)//---->②

~test(){}

int getvalue()

//過載方法

int getvalue() const

};int main()

修改辦法:

1,在③處給初始值。例如:int data = 10;

2,在④處,修改為:int(int i = 0):mi(i){

3,把類int的所有建構函式和拷貝建構函式注釋掉,這樣一來,編譯器就和自動合成這些建構函式。

拷貝控制之拷貝建構函式

當我們定義乙個類的時候。我們通常會顯式或隱式的指定在此類的物件在建立 移動 銷毀的時候要做些什麼。乙個類通常通過定義五種特殊的成員函式來控制這些操作 拷貝建構函式 拷貝賦值運算子 移動建構函式 移動賦值運算子 析構函式。如果我們沒有定義這些成員函式,編譯器會自動定義些缺失的操作。有時也會造成些意想不...

深淺拷貝問題 拷貝建構函式

深拷貝 在堆區重新申請空間,進行拷貝操作 淺拷貝 簡單的複製拷貝操作 class person person int age person int m age void test 當引數中有堆區引數,改造之後 class person person int age,int height person...

拷貝建構函式關於指標的拷貝問題

1.拷貝建構函式的定義 如果乙個建構函式的第乙個引數是自身型別的引用,且任何額外引數都有預設值。拷貝建構函式的第乙個引數必須是乙個引用型別。合成拷貝建構函式 如果我們沒有為乙個類定義拷貝建構函式,編譯器會為我們定義乙個。編譯器從給定物件中,依次將每個非static成員拷貝到正在建立的物件中。2.拷貝...