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,如果中途测试失败需要退出也不需要自己释放内存