2015-10-21 69 views
2

假設我有另一個類Outer內的類Inner刪除內部類的實例在外部類的一個實例

class Inner 
{ 
public: 
    Inner(); 
    ~Inner(); 
}; 

class Outer 
{ 
public: 
    Outer(); 
    ~Outer(); 
private: 
    Inner in; 
}; 

現在,在主說我聲明類型的對象外:

int main() 
{ 
    Outer out; 

    return 0; 
} 

對象out有一個in作爲成員的實例。如果我打電話給out的析構函數,它是否會調用in的析構函數?如果不是,我怎樣才能實現類Outer的析構函數來成功調用Inner類的析構函數?

例如,如果我有一個用戶的應用程序,並且每個用戶都有一個配置文件,我怎樣才能使它所以當用戶的帳戶被刪除,因此是用戶的個人資料?

+0

爲'in'的析構函數將被調用。如果'in'是'inner *'並且使用'new'聲明,則不會被調用。 –

回答

2

當你的class Outer的實例out超出範圍時,發生的第一件事是它的所有成員(它們也剛剛超出範圍)都會調用它的析構函數。然後class Outer的析構函數被調用。 C++標準保證了這一點,所以這個行爲是由C++編譯器自動生成的。