#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裡深淺拷貝的圖示 圖中的是深...