2011-05-20 84 views
0

一個簡單的問題,但我不確定它在C++中做了什麼。C++ dtor釋放_bstr_t內存

當我有一個類有_bstr_t成員。 我想知道,如果確實當對象被刪除的成員被釋放:

class A { 
    _bstr_t foo("Testing"); 
} 

A類不具有析構函數。那麼默認的dtor調用A類的成員的dtor?

特別是_bstr_t,因爲它通過SysAllocString分配一個字符串。

感謝

回答

5

是,_bstr_t析構函數將被稱爲 - 編譯器將採取照顧。即使它沒有用戶定義的析構函數,編譯器也會發出代碼,通過調用它們的析構函數破壞所有完全構造的子對象。

由於_bstr_t有一個非平凡的析構函數,負責調用SysFreeString(),析構函數將被調用並釋放BSTR。