<現代C++實戰30講>筆記 01 | 堆、棧、RAII:C++里該如何管理資源?


1、堆(heap),動態分配的內存區域,分配之后需手工釋放(new, delete, malloc, free)

    這種方式需要分配內存,釋放內存,因此可能會造成內存泄露,或者內存碎片的問題。

2、棧(stack),函數調用過程中,產生的本地變量和調用的數據區域

   分配、釋放簡單,只需要移動指針即可;后進先出,也不會出現內存碎片。因此對象的分配,也更適合放在棧上。

   但有些時候,對象不能或者不應該放在棧上,包括對象很大,對象的大小在編譯時不能確定,對象是函數的返回值,但由於特殊的原因,不應使用對象的值返回。

3、RAII,C++中特有的資源管理方式,通過使用棧和析構函數來實現。並且不限於清理內存,還包括關閉文件,釋放同步鎖,釋放其他重要的系統資源

4、棧展開

    在發生異常時,對析構函數進行調用

5、怎么考慮在棧上分配還是在堆上分配

    凡生命周期超出當前函數的,一般需要用堆(或者使用對象移動傳遞)。反之,生命周期在當前函數內的,就該用棧

 


免責聲明!

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



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