2012-12-26 32 views
-1

我有一個類,我想刪除它。班級裏面是各種各樣的增值經銷商,字符串,向量等刪除一個對象,它的變量在C++

當我從另一個類調用:

delete myClass; 

當我創建一個新的myClass的,對增值經銷商似乎仍然存在。

我需要裏面手動刪除每個變種:

myClass::~myClass() 
{ 
} 

感謝您的幫助!

+5

'我有一個類,我想刪除it'你的意思是類'myClass'的對象?另外,是用'new'創建的那些字符串,矢量等?如果是這樣,你必須在'〜myclass()'中明確地刪除它們以釋放它們的內存。 –

回答

2

當對象被銷燬的對象的任何成員將被破壞。例如:

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,yz現在都沒有了。但是請注意,z只是一個指針。指針將被銷燬,但不是它指向的對象。你也需要確保你也是delete ap->z。簡單的說,我們有兩個new s,但只有一個delete - 這是一個很好的跡象,表明存在內存泄漏。此代碼將泄漏動態分配的float

如上代碼註釋中提到以上,你可能會發現,試圖訪問對象的成員還是工作得很好,你甚至得到正確的值。但是,這並不好。如果您嘗試訪問已經爲delete d的對象的任何部分,則會獲得未定義的行爲。這意味着任何事情都可能發生,包括看起來工作正常。任何調用未定義行爲的C++都是完全不可靠的,可能會破壞宇宙。

+0

這是我的一個不會被破壞的變量: – panthro

+0

QVariantList recordingsData; – panthro

+0

任何想法爲什麼,當我使用刪除對象? – panthro

0

如果它們是指向這意味着可以專屬於您的第一個實例類實例,你將不得不刪除它們。否則,他們將被刪除與他們的容器。

相關問題