person p(q); //此時複製建構函式被用來建立例項p
person p = q; //此時複製建構函式被用來在定義例項p時初始化p
f(p); //此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立乙個區域性物件,與函式內的區域性變數具有相同的作用域
需要注意的是,賦值並不會呼叫複製建構函式,賦值只是賦值運算子(過載)在起作用
p = q; //此時沒有複製建構函式的呼叫!
簡單來記的話就是,如果物件在宣告的同時將另乙個已存在的物件賦給它,就會呼叫複製建構函式;如果物件已經存在,然後將另乙個已存在的物件賦給它,呼叫的就是賦值運算子(過載)
預設的複製建構函式和賦值運算子進行的都是」shallow copy」,只是簡單地複製字段,因此如果物件中含有動態分配的記憶體,就需要我們自己重寫複製建構函式或者過載賦值運算子來實現」deep copy」,確保資料的完整性和安全性。
eg:string.h
#include
#include
#ifndef string_h_
#define string_h_
class string
;#endif
string_h.cpp
#include"string.h"
using
std::cout;
using
std::endl;
string::string()
else
cout
<<"建構函式有參:"
string & s)
string::operator =(const
string & s)
**: C 複製建構函式在什麼時候被呼叫?
1 物件在建立時使用其他的物件初始化 person p q 此時複製建構函式被用來建立例項p person p q 此時複製建構函式被用來在定義例項p時初始化p 2 物件作為函式的引數進行值傳遞時 f p 此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立乙個區域性物件,與函式內的區域性...
複製建構函式在什麼時候被呼叫?
這個問題不是疑問了,查了一下國外 總結一下。假設person是乙個類,複製建構函式的呼叫會在以下幾種情況下發生 1 物件在建立時使用其他的物件初始化 person p q 此時複製建構函式被用來建立例項p person p q 此時複製建構函式被用來在定義例項p時初始化p 2 物件作為函式的引數進行...
C 拷貝建構函式在什麼時候被呼叫?
1 物件在建立時使用其他的物件初始化 person p q 此時複製建構函式被用來建立例項p person p q 此時複製建構函式被用來在定義例項p時初始化p 2 物件作為函式的引數進行值傳遞時 f p 此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立乙個區域性物件,與函式內的區域性...