1
我對C++內存管理相當陌生。我讀Should every class have a virtual destructor?,發現這個答案:使用受保護的析構函數刪除對象
每一個抽象類,要麼有一個
- 保護的析構函數或
- 虛析
如果你有一個非公開虛擬析構函數,這是不好的,因爲它允許用戶通過該指針刪除一個派生的對象。因爲我們都知道,這是未定義的行爲。
對於不打算通過指向它的指針進行刪除的類,沒有任何理由擁有虛擬析構函數。這不僅會浪費資源,更重要的是會給用戶一個錯誤的提示。試想一下,std :: iterator是一個虛擬析構函數會有什麼蹩腳的感覺。
所以我現在有一個受保護的析構函數(我不是從類中派生的)。
在另一個類,雖然我有一個指向這個對象的指針。在我的構造函數中,我讓指針成爲該類的「新」對象,在我的設計師中,我想摧毀它。
我該怎麼做?如果析構函數沒有被保護,我會得到一個seg錯誤(我不完全明白,但我意識到編程是錯誤的)。如果析構函數受保護,我不知道如何刪除該對象。
好的,但是如果我公開析構函數,當我嘗試刪除該對象時,會出現段錯誤 – jcuenod 2012-01-08 14:15:33
我意識到我的問題在於要刪除的類中某處。在這一點上,我正在考慮構造函數。 – jcuenod 2012-01-08 15:17:20
你必須顯示一些代碼。段錯誤很可能不是來自內置結構,而是來自您自己的編程:) – filmor 2012-01-08 15:18:18