簡體   English   中英

“刪除”實際上在 C++ 中做什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM