我有一個類,我想刪除它。班級裏面是各種各樣的增值經銷商,字符串,向量等刪除一個對象,它的變量在C++
當我從另一個類調用:
delete myClass;
當我創建一個新的myClass的,對增值經銷商似乎仍然存在。
我需要裏面手動刪除每個變種:
myClass::~myClass()
{
}
感謝您的幫助!
我有一個類,我想刪除它。班級裏面是各種各樣的增值經銷商,字符串,向量等刪除一個對象,它的變量在C++
當我從另一個類調用:
delete myClass;
當我創建一個新的myClass的,對增值經銷商似乎仍然存在。
我需要裏面手動刪除每個變種:
myClass::~myClass()
{
}
感謝您的幫助!
當對象被銷燬的對象的任何成員將被破壞。例如:
struct A
{
int x;
char y;
float* z;
};
void foo()
{
A* ap = new A{5, 6};
ap->z = new float(13.37f); // This will be leaked
delete ap;
// You may find that the following still works:
// std::cout << ap.x << std::endl;
}
delete ap
後,對象指向ap
被破壞。其所有成員都被銷燬:x
,y
和z
現在都沒有了。但是請注意,z
只是一個指針。指針將被銷燬,但不是它指向的對象。你也需要確保你也是delete ap->z
。簡單的說,我們有兩個new
s,但只有一個delete
- 這是一個很好的跡象,表明存在內存泄漏。此代碼將泄漏動態分配的float
。
如上代碼註釋中提到以上,你可能會發現,試圖訪問對象的成員還是工作得很好,你甚至得到正確的值。但是,這並不好。如果您嘗試訪問已經爲delete
d的對象的任何部分,則會獲得未定義的行爲。這意味着任何事情都可能發生,包括看起來工作正常。任何調用未定義行爲的C++都是完全不可靠的,可能會破壞宇宙。
如果它們是指向這意味着可以專屬於您的第一個實例類實例,你將不得不刪除它們。否則,他們將被刪除與他們的容器。
'我有一個類,我想刪除it'你的意思是類'myClass'的對象?另外,是用'new'創建的那些字符串,矢量等?如果是這樣,你必須在'〜myclass()'中明確地刪除它們以釋放它們的內存。 –