c++安全释放资源

c++局部函数中使用new分配内存或者create*创建COM接口,由于程序可能在函数内下面的判断代码失败退出, 这样每次都需要delete内存或者release, 不仅麻烦而且可能忘记其中某个,造成资源没有及时释放.下面的通用的类可以解决这些问题:

//COM版
template< class T >
class CSafeRelease
{
public:
    CSafeRelease() : m_p(NULL){};
    CSafeRelease(T* p) : m_p(p) { };
    ~CSafeRelease() { if( m_p != NULL ) m_p->Release(); };
    T* Attach(T* p) { m_p = p;return m_p;};
    T* Detach() { T* t = m_p; m_p = NULL; return t; };
private:
    T* m_p;
};

//c++版
template< class T >
class CSafeDelete
{
public:
    CSafeDelete() : m_p(NULL){};
    CSafeDelete(T* p) : m_p(p) { };
    ~CSafeDelete() { if( m_p != NULL ) delete m_p; };
    T* Attach(T* p) { m_p = p;return m_p;};
    T* Detach() { T* t = m_p; m_p = NULL; return t; };
private:
    T* m_p;
};

 

用法:
 new 或者create后马上创建此类并用指针初始化该类, 如果代码最后不需要销毁就调用Detach,如果中途测试失败需要退出也不需要自己释放内存

posted @ 2012-07-13 18:41  likebeta  阅读(1553)  评论(0编辑  收藏  举报