c++:複製建構函式在什麼時候被呼叫?它和operator = 區分
1eg:、物件在建立時使用其他的物件初始化
person p(q);
//此時複製建構函式被用來建立例項p
person p = q; //
此時複製建構函式被用來在定義例項p時初始化p
2、物件作為函式的引數進行值傳遞時
f(p);
//此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立乙個區域性物件,與函式內的區域性變數具有相同的作用域
需要注意的是,賦值並不會呼叫複製建構函式,賦值只是賦值運算子(過載)在起作用
p = q; //
此時沒有複製建構函式的呼叫!
簡單來記的話就是,如果物件在宣告的同時將另乙個已存在的物件賦給它,就會呼叫複製建構函式;如果物件已經存在,然後將另乙個已存在的物件賦給它,呼叫的就是賦值運算子(過載)
預設的複製建構函式和賦值運算子進行的都是
"shallow copy
",只是簡單地複製字段,因此如果物件中含有動態分配的記憶體,就需要我們自己重寫複製建構函式或者過載賦值運算子來實現"
deep copy
",確保資料的完整性和安全性。
string.h
#include#includestring_h.cpp#ifndef string_h_
#define string_h_
class
string
;#endif
#include"string.h
"using
std::cout;
using
std::endl;
string::string
()string::string(const
char *value)
else
cout
<
建構函式有參:
C 複製建構函式,過載賦值運算子
c 的複製建構函式,賦值建構函式,有時候會有點暈,下面總結一下 首先來談一下複製建構函式 includeusing namespace std include includeclass a void fuction void show int main 解釋 定義了乙個類,資料成員有字元指標,和整型...
C 複製建構函式和賦值運算子過載函式
宣告乙個空的類testsize,sizeof testsize 為1,為其宣告建構函式和析構函式,依舊為1 建構函式不能使用關鍵字virtual,析構函式可以 一旦類中存在虛函式,就會為該類生成虛函式表,並在每乙個例項中新增乙個指向虛函式表的指標,從而大小為乙個指標大小,32位機器上為4,64位機器...
C 之拷貝建構函式和複製運算子過載
1 c 拷貝建構函式 拷貝建構函式是為了解決如神明物件時候就用乙個已經存在的物件來初始化這個新的物件,如mystring a b 這裡b是已經存在mystring物件。但是這裡需要注意拷貝建構函式裡面的內部實現細節。這裡面其實是在這個a物件類的定義中定義了拷貝建構函式的格式如 mystring co...