我可以在析構函數上使用一些說明。包含含指針對象的對象的C++析構函數
我知道如果一個對象包含一個指向已分配內存的指針,那麼該對象的析構函數應該在該指針上調用delete
。但是,如果一個對象包含包含一個指向分配的內存對象,如string
:
class Foo
{
string bar;
};
Foo* foo = new Foo;
delete foo;
有任何事物我必須做,以確保該字符串在基礎char[]
被釋放?
我可以在析構函數上使用一些說明。包含含指針對象的對象的C++析構函數
我知道如果一個對象包含一個指向已分配內存的指針,那麼該對象的析構函數應該在該指針上調用delete
。但是,如果一個對象包含包含一個指向分配的內存對象,如string
:
class Foo
{
string bar;
};
Foo* foo = new Foo;
delete foo;
有任何事物我必須做,以確保該字符串在基礎char[]
被釋放?
string
類型的析構函數負責清理它擁有的任何資源。你的對象的析構函數將調用成員對象的析構函數。
string
類的析構函數負責任何清理。你不必擔心它。
當你的課程遭到破壞時,其所有成員(包括string
)也會自動銷燬。
清理string
(其中char數組是其他類不應該依賴的實現細節)所擁有的任何內部資源是對象的析構函數的責任。
你可以看看下面的規則。您使用new創建(並保留所有權)的任何對象必須通過在析構函數中調用delete
來銷燬。
請問您可以修改類型爲'Foo *'嗎? Stackoverflow不會讓我做1個字符的更正;) – filmor