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