呼叫C 複製建構函式和拷貝建構函式

2021-04-29 00:44:49 字數 1343 閱讀 2052

呼叫c++複製建構函式和拷貝建構函式

1. 何時呼叫複製建構函式

複製建構函式用於將乙個物件複製到新建立的物件中。也就是說,它用於初始化過程中,而不是常規的賦值過程中。類的複製建構函式原型通常如下:

class_name(const class_name&);

它接受乙個指向類物件的常量引用作為引數。例如,string類的複製建構函式的原型如下:

string(const string&);

新建乙個物件並將其初始化為同類現有物件時,複製建構函式都將被呼叫。這在很多情況下都可能發生,最常見的情況是將新物件顯示地初始化為現有的物件。例如,假設motto是乙個string物件,則下面4種宣告都將呼叫複製建構函式:

string ditto(motto);

string metoo = motto;

string also = string(motto);

string *pstring = new string(motto);

其中中間的2種宣告可能會使用複製建構函式直接建立metto和also,也可能會使用複製建構函式生成乙個臨時物件,然後將臨時物件的內容賦給metoo和also,這取決於具體的實現。最後一種宣告使用motto初始化乙個匿名物件,並將新物件的位址賦給pstring指標。

2. 何時呼叫賦值建構函式

賦值建構函式是通過過載賦值操作符實現的,這種操作符的原型如下:

class_name& class_name::operator=(const class_name&);

它接受並返回乙個指向類物件的引用。例如,string 類的賦值操作符的原型如下:

string& string::operator=(const string&);

將已有的物件賦給另乙個物件時,將使用過載的賦值操作符:

string headline1("test");

string knot;

knot = headline1;

初始化物件時,並不一定會使用賦值操作符:

string metoo = knot;

這裡,metoo是乙個新建立的物件,被初始化為knot的值,因此使用複製建構函式。不過,正如前面指出的,實現時也可能分兩步來處理這條語句:使用複製建構函式建立乙個臨時物件,然後通過賦值將臨時物件的值複製到新物件中。這就是說,初始化總是會呼叫複製建構函式,而使用=操作符時也可能呼叫賦值操作符

例項**如下:

#include

using namespace std;

class test

; test::test()

{ cout<<"呼叫建構函式"<

何時呼叫C 複製建構函式和拷貝建構函式

1.何時呼叫複製建構函式 複製建構函式用於將乙個物件複製到新建立的物件中。也就是說,它用於初始化過程中,而不是常規的賦值過程中。類的複製建構函式原型通常如下 class name const class name 它接受乙個指向類物件的常量引用作為引數。例如,string類的複製建構函式的原型如下 ...

拷貝建構函式(複製建構函式)

執行 物件a 物件b時,系統需要呼叫拷貝建構函式,如果程式設計師沒寫,則呼叫預設的拷貝建構函式。預設的拷貝建構函式利用淺拷貝方式,它的樣子是 a const a a 淺拷貝 拷貝的時候,兩個指標指向同乙個區域 char str1 helloworld char str2 str1 深拷貝 拷貝的時候...

c 複製 拷貝建構函式

在c 中,定義乙個空類時,編譯器會預設宣告6個成員函式,它們分別是 class empty 注意 一下,編譯器預設合成的析構函式不是虛函式。首先,說一下什麼是拷貝建構函式 也可以叫複製建構函式 它是乙個特殊的建構函式,具有單個形參 此形參是對該類型別的引用,需要用const修飾,否則會無限迴圈呼叫複...