C++ primer中提到的傳統智能指標的實現:
智能指標的實質就是在棧上分配一個指向資來源物件的指標,當出了對象的範圍的時候,會自動調用其解構函式。修改解構函式的定義:當前對象的引用計數不為0的時候將計數減一,若減一之後引用次數為0,就刪除當前對象:
智能指標和引用計數的通常實現方法:
常用的記憶體管理方式有智能指標和引用計數技術,下面來分別討論cocos2d-x和CEF以及C++11中智能指標的實現:
Cocos2d-x中引用計數的實現:1.如何?引用計數以及記憶體管理基類CCObject中m_uReference儲存著引用計數值:
class CCObject{public: // object id, CCScriptSupport need public m_uID unsigned int m_uID; // Lua reference id int m_nLuaID;protected: // count of references unsigned int m_uReference; // is the object autoreleased bool m_bManaged; public: CCObject(void); virtual ~CCObject(void); void release(void); void retain(void); CCObject* autorelease(void); CCObject* copy(void); bool isSingleReference(void); unsigned int retainCount(void); virtual bool isEqual(const CCObject* pObject); virtual void update(float dt) {CC_UNUSED_PARAM(dt);}; friend class CCAutoreleasePool;};2.如何建立對象
3.如何收回記憶體