關於c++中局部變量和全局變量的存儲位置及內存回收機制


局部變量,參數變量存放在棧中,當離開作用范圍后,分配的內存在作用范圍外會被系統自動回收。

new出來的內存空間存放在堆中,不受作用域管理,不會被系統自動回收,只有在使用delete刪除或者整個程序結束后才會釋放內存。

因此很容易發生忘記delete而造成內存泄漏事件。例如在某個函數中定義有:

A* a=new A();

則指針a在函數運行完畢后將銷毀,但是new出來的內存並不會被銷毀,需要執行delete a;才能被銷毀。

此外static變量,全局變量的有效期都是整個程序運行期。

而智能指針的出現則是在指針被銷毀的情況下,也會銷毀指針指向的內存,避免內存泄漏發生。

這是一種常見的內存泄露的情況。盡量避免手動管理指針,采用c++11中的shared_ptr和unique_ptr來管理。

詳細說明請參考:https://blog.csdn.net/qq_33266987/article/details/51965221

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM