淺拷貝問題

2021-09-11 02:09:15 字數 695 閱讀 1333

#define _crt_secure_no_warnings

#include

using namespace std;

class myname

~myname()

}private:

char* p;

int m_len;

};int main()

執行之後發現編譯可以通過,執行也正常,但是結束時會出現問題

原因:c++編譯器只支援淺拷貝,name2初始化是通過name1的賦值進行的,此時編譯器會呼叫類的copy建構函式,而我們並沒有重寫copy建構函式,而是呼叫的預設的copy建構函式,由於c++編譯器只支援淺拷貝,造成了只複製了指標變數,而指標變數所指向的記憶體空間並沒有複製,即 name1和name2指向了同一值,當程式進行析構時,首先析構name2,此時釋放記憶體空間,當析構name1時,由於記憶體空間已經被釋放,此時編譯器報錯

解決方法:

在myname類中重寫copy建構函式:

myname(const myname& myname)

{m_len = myname.m_len;

p = (char*)malloc(m_len + 1);

strcpy(p, myname.p);

淺拷貝問題跑出

傳智掃地僧課程學習筆記。define crt secure no warnings include using namespace std class name name protected private char m p int m len 物件析構的時候 出現coredump void obj...

深拷貝和淺拷貝問題

下午遇到乙個關於乙個表的數值拷貝的問題,有點意思,不多說,直接上 記錄玩家的資訊 self.userinfo for i 1,play count do table.insert self.userinfo,self.deskuserlist getuserbydeskstation i 1 end...

深拷貝和淺拷貝使用問題

定義 如果類中包含了使用new初始化的指標成員,應當定義乙個複製建構函式,以複製指向的資料,而不是指標,這是深度複製或深拷貝。複製的另一種形式只是複製指標值,稱為成員複製或淺複製或淺拷貝。它只複製指標資訊,而不會深入 挖掘 以複製指標引用的結構。c primer plus裡深淺拷貝的圖示 圖中的是深...