現代c++內存管理的方式有哪些?

cocos2d-x從cocoa那裡搬來的autorelease什麼鬼的,應該不是現代c++下內存管理的最佳實踐了吧?什麼RAII的,真的實用嗎?現代的c++內存管理有哪些常見的方式呢?樓主最近要寫個2D圖形的玩意,對象一多還真不知道怎麼管才是最好的了,還請各位大俠賜教。


這有個專題

http://cplusplus.wikidot.com/cn:memory-management


大家不要見笑,局部需要大內存,我都是 std::vector 代替 malloc / free.


C++11已經可以將所有的資源管理歸結於:unique_ptr和shared_ptr,shared_ptr在不考慮效率的前提下完全可以替代unique_ptr,unique_ptr幾乎是0成本.

其實資源管理絕大多數都發生在局部,這時候當然使用unique_ptr,善用需要傳遞函數對象的重載,為了代碼簡潔,善用decltype關鍵字,類內部能隱藏的成員變數也應使用unique_ptr.其他情況使用shared_ptr.


咋沒人答捏。

1. RAII 很實用啊,一直在用啊,標準都在用啊,&std::file& std::fstream, std::vector, std::thread, 統統都是 RAII 啊。

2. 不要把 內存管理(memory management) 和 和 資源管理(resource management)混淆起來呀,不是一個概念的。

內存管理是 malloc/free,資源管理是 智能指針和 RAII


raii非常有用,c++程序快而穩定的運行,raii功不可沒。資源管理類和智能指針都是內存管理神器,很多第三方大型庫都用這些技術來管理內存。如果是非常專業的項目,一般會使用各種高性能內存池,但是本質思想沒有太大變化。


延遲刪除還是有用的,本身autorelease沒啥問題,但cocos2dx沒提供對應的智能指針著實不應該。就憑這一點,觸控就不應該上市。


大家回答得很多了,再補充個,allocator


推薦閱讀:

Firefox和Chrome相比是否更適合小內存用戶?
c++字元串拷貝和內存問題?
比較有效的內存清理軟體?高手們都是怎麼手動優化系統和內存的?
Windows10 TH2中引入的內存壓縮技術是什麼原理?
Unable to create new native thread 的本質是什麼?

TAG:程序員 | 編程 | 內存管理 | C |