c 之深拷貝和淺拷貝

2022-06-11 18:48:07 字數 619 閱讀 6863

淺拷貝:簡單的賦值拷貝操作。

深拷貝:在堆區重新申請空間,進行拷貝操作。

#includeusing

namespace

std;

class

person

person(

int age,int

height)

person(

const person&p)

~person()

cout

<< "

person析構函式

"<

}};void

test()

intmain()

輸出:

為什麼淺拷貝會帶來重複釋放問題呢?

在堆區開闢記憶體儲存資料之後,如果不自己定義拷貝建構函式,那麼系統會呼叫預設的拷貝建構函式,這種情況下就是淺拷貝,此時,p2和p1的m_height都指向同一塊位址。當p2被釋放之後,即指向的位址釋放了,此時再去釋放p1,p1就找不到其指向的記憶體,但是又要進行釋放,所以就重複釋放,執行時會報錯。

C 之淺拷貝和深拷貝

如果是乙個類,裡面沒有指標的成員變數,那麼深拷貝與淺拷貝沒有什麼區別,但是有了指標,情況就變了 include using namespace std class person int age int main 輸出結果是 20 20 1020可以看出,p1中age修改了,但是沒有修改p2中的age...

C 之深拷貝 淺拷貝

關於拷貝的錯誤 對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。以下有乙個學生類 執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,這會導致什麼問題呢?name指標被分配一次記憶體,但是程式結...

C 之深拷貝 淺拷貝

什麼是拷貝建構函式?通過拷貝物件的方式建立乙個新的物件,拷貝建構函式的引數必須是類物件的引用,也就是將乙個物件拷貝給另乙個新建的物件 用途,在建立物件的時候,使用同一類之前建立的物件來初始化新建立的物件 book book b 必須是引用的原因是,如果是傳值方式將實參傳遞給形參,中間要經歷乙個物件的...