2013-10-21 22 views
0

我知道析構函數用於銷燬類中的全局指針,但是我需要它們來銷燬像int或std :: string這樣的正常變量嗎?你需要析構函數來銷燬全局int,float或std :: string變量嗎?

數組如何像int num [2]?

什麼變量類型應該在析構函數中銷燬?

例如:

class myclass 
{ 
public: 
    myclass() 
    ~myclass() 
    { 
     delete num; 
     delete ar_num; 
     delete str; 
    } 
private: 
    int num; 
    std::string str; 
    int ar_num[2] = {0,1}; 
} 
+6

您需要閱讀C++的基礎知識。如果你已經有,找到另一個來源,因爲你目前使用的不是很好。 – dandan78

回答

8

你應該只deletenew。既然你沒有自己分配成員變量,你不應該(因爲沒有變量是指針,你不能)用delete釋放它們。

經驗法則:如果你做new那麼你需要做delete

+2

有趣的是他的代碼顯示了一些與他的問題無關的東西。就好像他正在混合「刪除」和破壞:例如,他的析構函數肯定會破壞'str'。 –

1

一切都應該在析構函數被破壞,但是......

所有直接成員將自動銷燬;你不能 有一個不會破壞它們的析構函數。 (在某些情況下, 就像int,「析構函數」實際上是沒有操作的。)

你很迷惑破壞和刪除。您只有delete 已被動態分配的東西。 (Directy —如果 你new MyClassnum將被動態分配爲MyClass 一部分。但你不應該,而事實上你不能 刪除。)的delete的參數必須是一個指針,它 必須指向這是使用new創建的。

0

有一些變量在進程堆棧上分配了內存。所以,一旦進程退出,堆棧將自動清理佔用的內存。您只需要delete您爲new分配了內存的變量。

您可以將此視爲malloc ing C。您只需要free即可根據您的請求動態分配內存。