2012-10-06 55 views
1

我可以在析構函數上使用一些說明。包含含指針對象的對象的C++析構函數

我知道如果一個對象包含一個指向已分配內存的指針,那麼該對象的析構函數應該在該指針上調用delete。但是,如果一個對象包含包含一個指向分配的內存對象,如string

class Foo 
{ 
    string bar; 
}; 

Foo* foo = new Foo; 
delete foo; 

有任何事物我必須做,以確保該字符串在基礎char[]被釋放?

+0

請問您可以修改類型爲'Foo *'嗎? Stackoverflow不會讓我做1個字符的更正;) – filmor

回答

2

string類型的析構函數負責清理它擁有的任何資源。你的對象的析構函數將調用成員對象的析構函數。

2

string類的析構函數負責任何清理。你不必擔心它。

2

當你的課程遭到破壞時,其所有成員(包括string)也會自動銷燬。

清理string(其中char數組是其他類不應該依賴的實現細節)所擁有的任何內部資源是對象的析構函數的責任。

1

你可以看看下面的規則。您使用new創建(並保留所有權)的任何對象必須通過在析構函數中調用delete來銷燬。