拷貝建構函式 淺拷貝遇到的問題 如何用深拷貝解決

2021-10-10 01:09:57 字數 1073 閱讀 6242

使用條件:

1.明確表示由乙個物件初始化另乙個物件

2當物件作為函式的實參傳遞給形參時

3當物件作為函式的返回值時

#include

using

namespace std;

class

person

person

(const person &p)};

intmain()

輸出:

constructor;	age = 10

copy construct; age = 10

constructor; age = 3

拷貝者和被拷貝者若是同乙個位址,則為淺拷貝,反之為深拷貝。

#include

using

namespace std;

class

person

person

(const person &p)

~person()

};intmain()

輸出:

普通構造	age=10

拷貝構造 age=10

~person 析構完成!

free(

): double free detected in tcache 2

[1] 46504 abort (core dumped) ./deep

#include

using

namespace std;

class

person

person

(const person &p)

~person()

};intmain()

輸出:

普通構造	age=10

拷貝構造 age=10

~person 析構完成!

~person 析構完成!

沒有出現double free!

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

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

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

深淺拷貝的區別 淺拷貝是將原始物件中的資料型字段拷貝到新物件中去,將引用型字段的 引用 複製到新物件中去,不把 引用的物件 複製進去,所以原始物件和新物件引用同一物件 新物件中的引用型字段發生變化會導致原始物件中的對應欄位也發生變化。line line const line obj 深拷貝是在引用方...

拷貝建構函式 淺拷貝 深拷貝建構函式的應用

一 基本概念 建構函式 屬於特殊的類成員函式,為資料成員初始化和分配記憶體。拷貝建構函式 屬於特殊的建構函式,同乙個類的a物件構造和初始化b物件。二 什麼時候用拷貝建構函式?在c 中,拷貝建構函式將會適用在下面三種情況。1 乙個物件以值傳遞的方式傳入函式。2 乙個物件以值傳遞的方式從函式返回。3 乙...