![](/img/trans.png)
[英]When Does Object Actually Gets Destroyed in C++? What does delete(ptr) Do?
[英]What does "delete" actually do in c++?
我不確定命令delete
在 C++ 中到底做了什么? 據我所知,要釋放內存,我必須在對象上使用delete
,我之前用new
實例化過,例如:
Obj* object = new Obj();
delete object;
但是delete
真的從我的對象中刪除了數據,它是否以任何方式改變了對象本身內部的對象和數據,或者它只是調用了相應的析構函數? 如果析構函數為空,使用delete
對對象有什么影響嗎? 這個問題的原因如下:
如果我只是以這種方式刪除對象,指針就會無效,並且我的程序會崩潰。 所以,我認為我應該只用 delete 命令調用析構函數,並在析構函數內部采取進一步的步驟來實際進行清理,並確保引用該對象的其他對象知道該指針確實無效。
除了調用析構函數之外, delete
操作符還會釋放之前由new
分配的內存。 該內存返回到可以分配的可用內存池。
這也意味着object
現在指向無效內存,任何使用它的嘗試,或任何其他指向它的指針,都將調用未定義的行為。 這可能是您的程序中發生的事情。
因此,您的程序很可能存在“擁有”指針的問題。 您不應該對仍在程序中其他地方使用的指針值調用delete
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.