簡體   English   中英

c ++程序結束時從內存釋放指針?

[英]are pointers released from memory when c++ program end?

這是一個初學者的問題,但是我學習了使用c#進行編程的知識,現在我正在使用c ++,並且現在我正在使用指針,我知道在完成對它們的處理之后,當程序關閉時,我必須將其從內存中釋放出來。他們從內存中移走還是留在那里?

程序結束時,它使用的所有內存(無論是否動態分配)都返回給操作系統。 不管是C程序,C ++程序,C#程序還是您可能正在編寫的任何其他類型的程序,都沒有關系。

現在,僅因為操作系統將回收內存,並不意味着您可以更輕松地進行內存管理。 在程序運行時,您應嘗試釋放完成的所有內存。 否則會導致“內存泄漏”,並且這些泄漏肯定會影響您的程序及其所運行的系統,至少在您的程序運行時。

請注意,不是需要釋放的指針,而是指向的對象。

答案取決於指針指向的內存類型:

  • 如果指針指向自動對象,則將隱式清除對象。
  • 如果指針指向使用newnew []malloccalloc動態分配的對象,則需要通過resp調用deletedelete []free顯式釋放它們。

請注意,建議您謹慎使用動態分配;如果必須,則使用智能指針而不是原始指針。

編輯:
如果您的問題是:
如果您的程序沒有取消分配內存並退出該怎么辦?

答案是:
操作系統對其進行了回收。 操作系統只是收回分配給進程的所有內存,而該進程不了解程序是否泄漏了內存。
但是,自己清理自己的混亂始終是一個好習慣。
如果您的類的析構函數確實具有帶副作用的代碼,則不對動態分配的指針調用delete導致未定義行為,這會使您的代碼完全陷入編譯器的擺布之下。

您分配的內存(例如,使用New關鍵字)將保留在那里,除非您將其刪除! 如果您在談論指針本身,那么可以! 在程序結束時,指針將被清除!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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