一般来说,计算机程序分配内存在堆和栈上。在堆上的内存系统不会自动释放,需要人工释放,而在栈上的内存会自动释放。
而,堆上的内存人工释放不是一件容易的事情,什么时刻释放和是否释放完全都是问题。本文模仿osg中osg::ref_ptr类,写了一个指针,自动释放分配的内存。
// 声明一个类
class Derive
{
public:
Derive(){ std::cout << "Derive have create" << std::endl; }
~Derive(){ std::cout << "Derive have destroy" << std::endl; }
void ref(){ ++_count; }
void unref()
{
--_count;
if (!_count)
{
delete(this);
}
}
private:
int _count;
};
// 超级指针类
template<typename T>
class ref_ptr
{
public:
ref_ptr()
{
_ptr = nullptr;
}
~ref_ptr()
{
if (_ptr)
{
_ptr->unref();
}
}
ref_ptr(T* p)
{
_ptr = p;
if (_ptr)
{
_ptr->ref();
}
}
ref_ptr& operator=(T* p)
{
T* temp = _ptr;
_ptr = p;
if (_ptr)
{
_ptr->ref();
}
if (temp)
{
temp->unref();
}
}
private:
T* _ptr;
};
// 普通的类,没有指针操作,