2014-04-04 57 views
2

如果我有像我是否必須在析構函數中做任何事情來釋放非指針成員變量?

class Foo { ... } 

class UsesFoo { 
private: 
    Foo foo; 
public: 
    UsesFoo() : foo(1, 2, 3) { } 
} 

然後按我的理解,當你建造一個UsesFoo(無論是UsesFoo *myMan = new UsesFoo();UsesFoo myMan;),它通過調用Foo(1, 2, 3)創建Foo對象彷彿。當UsesFoo遭到破壞(通過delete myMan;或超出範圍),Foo裏面也將被銷燬。

如果我提供了下面的析構函數,Foo還會被破壞嗎?

~UsesFoo() { } 

如果不是,那我該怎麼做才能銷燬Foo?換句話說,作爲類實例的非指針成員變量是如何被破壞的語義是什麼?

回答

5

如果我提供了下面的析構函數,Foo還會被破壞嗎?

。答曰標準,

執行析構函數的主體和破壞人體內分配的任何自動對象之後,一個 析構X類要求X的直接非變異非靜態數據成員的析構函數,如果X是最派生類(12.6.2)的類型,則其析構函數調用X的虛擬基類的 析構函數。

(C++ 11,§12.4/ 8)

+0

尼斯,從標準報價=)。這在C++ 11之前有多遠? – Claudiu

+4

@Claudiu時間本身的開始。 – David

+0

@Claudiu,它在C++ 03中是§12.4/ 6。但我傾向於同意戴夫的評論。 – Brian

相關問題