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.如何收回内存