拷貝建構函式
阿新 • • 發佈:2021-02-20
1,普通物件之間賦值
我們知道普通物件的賦值是很簡單的,如:
int a = 10;
int b = a;
僅僅只用一個等號就能將物件a的值賦值給b。
2,如果是類呢?
#include<iostream> using namespace std; class A{ public: A(){ cout << "建構函式" << endl; } //A(A &aa){ // cout << "拷貝建構函式" << endl; // this->a = aa.a; //} int a; ~A(){ cout << "解構函式" << endl; } }; void test(){ A a; a.a = 10; A b = a; cout << b.a << endl; } int main() { test(); system("pause"); return 0; }
可見此時使用等號可以將物件a的東西賦值給物件b,此時物件b中的資料a也變成了10。
預設的拷貝建構函式如下:
A(A &aa){
cout << "拷貝建構函式" << endl;
this->a = aa.a;
}
拷貝建構函式
- 本質上也是一種建構函式
- 呼叫時機當用一個物件建立另外一個物件時呼叫。
- 預設的拷貝構造的作用(1,深拷貝,完全的把物件拷貝給物件;2,淺拷貝)
上面展示的是簡單的方法。
拷貝建構函式就是和正常的類似,即將一個物件裡面的東西都複製給另一個物件,這種方法也是預設的拷貝建構函式所做的事情。
如果類中的資料建立到堆上,這種普通的方法還顯然就不適合了,也就引出了第三步:深拷貝和淺拷貝的問題。
深拷貝和淺拷貝:https://blog.csdn.net/qq_46423166/article/details/113383873