当你需要经常在一个函数中分配资源,比如内存,文件,句柄等。函数可能有很多出口结束,这个时候需要释放资源,如果资源可以自动释放,而你不用自己去管理,那会便利很多。也可以防止忘记某些资源没被释放。
这个时候你可以增加一个辅助类,有成员变量保存要释放的资源句柄或指针,该类析构的时候如果资源有效就强制释放资源。在函数的入口处,定义该类的一个变量,当变量越出作用域时自动调用该辅助类释放资源。
该类的实现方式有两种:
(1)该类管理资源的分配,释放和操作,这个方法完善,重用性好,不过工作量比较大
(2)该类只做释放工作,资源由初始化函数传入,用构造函数只调用一次,不过这个方法重用性差
源代码为:
class CautoDeleteBufferClass
{
public:
CautoDeleteBufferClass(char **pp)
{
m_pp = pp;
}
~CautoDeleteBufferClass()
{
if(m_pp && *m_pp)
{
delete [] (*m_pp);
*m_pp = NULL;
}
m_pp = NULL;
}
protected:
char **m_pp;
};