[英]Destructor not being called
根據: http : //www.cplusplus.com/doc/tutorial/classes/
析構函數實現與構造函數相反的功能。 在銷毀對象時會自動調用該對象,這是因為其存在范圍已完成(例如,如果已將其定義為函數中的本地對象並且函數結束),或者因為它是動態分配的對象並已釋放使用運算符刪除。
示例代碼:
class Something
{
public:
Something() {cout << "construction called" << endl; }
~Something() { cout << "destruction called" << endl; }
};
void foo(){
Something *ob = new Something();
}
int _tmain(int argc, _TCHAR* argv[])
{
foo();
}
沒錯,但是您可以在動態內存中分配對象,這意味着只有調用delete
,它才會被破壞。
因為它是動態分配的對象,並且使用運算符delete釋放。
您永遠不會調用刪除。 Ergo內存泄漏和未調用的析構函數:
void foo(){
Something *ob = new Something();
delete ob;
}
或者,或者只是在自動內存中分配對象:
void foo(){
Something ob;
}
或將內存管理委托給智能指針。
在銷毀對象之前調用析構函數。 由於為對象分配了new
,因此必須通過在指向對象的指針上調用delete
來手動顯式銷毀它並釋放所占用的內存。
如果您已在自動存儲中創建對象,請
Something ob;
當foo
返回時,對象超出范圍將自動銷毀對象,並調用析構函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.