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.如何收回内存
本文详细介绍了C++ Primer中关于智能指针的实现,特别关注了传统智能指针如何通过在栈上分配指向资源对象的指针并在对象作用域结束时自动调用析构函数进行内存管理。同时,文章还探讨了引用计数的实现方法,以Cocos2d-x为例,展示了如何通过维护引用计数来管理内存,确保资源的合理使用和回收。
1147

被折叠的 条评论
为什么被折叠?



