2010-12-01 61 views
0

我正在學習C++,我不清楚類的析構函數。例如:C++:刪除公共和私人的所有聲明是否正確?

class A: 
{ 
    public: 
    int valueA; 
    private: 
    int valueB; 
}; 

A:~A() 
{ 
    delete valueA; 
    delete valueB; 
} 

那麼,基本上刪除公共和私人的每個聲明都是正確的嗎?

+12

絕對不是,你在學什麼書? – 2010-12-01 11:24:18

回答

8

不,您只需要delete已使用new分配。簡單的值類型如int s永遠不需要刪除。

如果您階級都包括使用new或者通過構造函數或以後通過其他方法則析構函數通常應該動態分配的數據取消分配所有的,不管羯羊數據是公共的還是私有的。

我可能會補充說,公開可見動態分配的指針成員可能不是最好的設計,但。

+0

+1最後一點是有爭議的,但這顯然不是解決這個問題的帖子。 – 2010-12-01 13:59:38

2

您不能只刪除ints指針。

您的析構函數將有權訪問私有成員,但是如果它們實際上是指針(以及公共指針),它可以刪除它們。

也只是因爲你的類的成員是一個指針,它並不意味着你的析構函數是要刪除它。 C++有一個「所有權」的概念。所有者通常但並不總是與創建者(新的被調用者)相同。

請注意,對於使用新T [x]的數組,您必須使用delete []。

有自動對象會爲您調用刪除。這些被稱爲智能指針,你應該在大多數情況下使用它們,而不是手動進行刪除。

析構函數可以做其他事情,而不僅僅是刪除指針。例如,如果您的類在創建時已將自己附加到某種圖形上,則析構函數可以自動從該圖形中移除它自己。

2

delete僅用於指針。在一般意義上,是的,你應該刪除所有你擁有的內存的公共和私有變量(你已經保留在你的班級內,你有責任刪除)。

0

不,只要刪除一些在你的班級建造的指針。