與預設建構函式不同,如果乙個類沒有顯示提供拷貝建構函式/拷貝賦值運算子等。。編譯器都會提供乙個合成的拷貝建構函式/...。
當類中有指標時,會引起淺拷貝這個都是常見知識點了,但是如果類中有引用,則合成拷貝建構函式會如何拷貝?
class a
//a(const a& c) : x1(c.x1), x2(x1){}
int x1;
int &x2;
};int main()
b中x2=3
b中x1=5 b中x2=3
a中x1=5 a中x2=5
請按任意鍵繼續. . .
從這個例子中,可以看到用a來初始化b,編譯器提供的合成拷貝建構函式提供的功能與我們想象中的不同,b中的x2並沒有與x1繫結。
如果去掉注釋,我們顯示提供拷貝建構函式,則b中x2與x1是繫結的。
b中x2=3
b中x1=5 b中x2=5
a中x1=5 a中x2=5
請按任意鍵繼續. . .
引用作為C C 類中成員變數
引用作為c c 類中成員變數 引用作為成員變數 不能有預設建構函式必須提供建構函式 建構函式的形參必須為引用型別 初始化必須在成員初始化鍊錶內完成 成員引用示例 c 引用 引用在定義時必須初始化,否則編譯時便會報錯。如果類 自定義型別 的成員是引用型別,需要注意一些問題。不能有預設建構函式,必須提供...
string類的寫時拷貝與引用計數
由於淺拷貝使多個物件共用一塊記憶體位址,呼叫析構函式時導致一塊記憶體被多次釋放,導致程式奔潰。實現string類的時候通常顯示的定義拷貝建構函式和運算子過載函式。由於釋放記憶體空間,開闢記憶體空間時花費時間,因此,在我們不需要寫,只是讀的時候就可以不用新開闢記憶體空間,就用淺拷貝的方式建立物件,當我...
python變數的引用,淺拷貝
python的變數是物件引用 l1和l2引用的相同的物件,所以會相互影響 元組不變的是引用的實體地址,如果引用的物件是可變的,那麼遠祖也會發生變化 但是t1 2 的id時鐘沒有發生變化 2 預設是淺拷貝,如果不可變,那麼互相不影響,沒問題 如果變數是可變的物件,就會比較麻煩 最終發現l1和l2始終引...