拷貝建構函式,深拷貝,淺拷貝

2021-08-30 22:07:39 字數 1179 閱讀 7329

深淺拷貝的區別:

淺拷貝是將原始物件中的資料型字段拷貝到新物件中去,將引用型字段的「引用」複製到新物件中去,不把「引用的物件」複製進去,所以原始物件和新物件引用同一物件

,新物件中的引用型字段發生變化會導致原始物件中的對應欄位也發生變化。

**:line::line(const line &obj)

深拷貝是在引用方面不同,深拷貝就是建立乙個新的和原始欄位的內容相同的字段,是兩個一樣大的資料段,所以兩者的引用是不同的,之後的新物件中的引用型字段發生改變,

不會引起原始物件中的字段發生改變。

**:ca(const ca& c)

拷貝建構函式是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。拷貝建構函式通常用於:

如果在類中沒有定義拷貝建構函式,編譯器會自行定義乙個。如果類帶有指標變數,並有動態記憶體分配,則它必須有乙個拷貝建構函式。拷貝建構函式的最常見形式如下:

classname (const classname &obj)

在這裡,obj是乙個物件引用,該物件是用於初始化另乙個物件的。

#include using namespace std; class line ; // 成員函式定義,包括建構函式 line::line(int len) line::line(const line &obj) line::~line(void) int line::getlength( void ) void display(line obj) ; // 成員函式定義,包括建構函式 line::line(int len) line::line(const line &obj) line::~line(void) int line::getlength( void ) void display(line obj) { cout << "line 大小 : " << obj.getlength() 《當上面的**被編譯和執行時,它會產生下列結果:

呼叫建構函式

呼叫拷貝建構函式並為指標 ptr 分配記憶體

呼叫拷貝建構函式並為指標 ptr 分配記憶體

line 大小 : 10

釋放記憶體

呼叫拷貝建構函式並為指標 ptr 分配記憶體

line 大小 : 10

釋放記憶體

釋放記憶體

釋放記憶體

拷貝建構函式淺拷貝深拷貝

1 函式的引數為類物件且引數採用值傳遞方式 2 將類物件做為函式的返回值。2.淺拷貝 所謂淺拷貝,指的是在物件複製時,只對物件中的資料成員進行簡單的賦值 預設拷貝建構函式執行的也是淺拷貝。大多情況下 淺拷貝 已經能很好地 工作了,但是一旦物件存在了動態成員,那麼淺拷貝就會出問題了,讓我們考慮如下一段...

C 拷貝建構函式 深拷貝,淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。執行程式,螢幕輸出100。從以上 的執行結果可以看出,系統為物件b分配了記憶體並完成了與物件a的複製過程。就...

C 拷貝建構函式 深拷貝,淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。include using namespace std class cexample void show 執...