博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++安全释放资源
阅读量:5834 次
发布时间:2019-06-18

本文共 788 字,大约阅读时间需要 2 分钟。

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

转载地址:http://qaucx.baihongyu.com/

你可能感兴趣的文章
[轉]redis;mongodb;memcache三者的性能比較
查看>>
微软职位内部推荐-Sr DEV
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
802.11 学习笔记
查看>>
Leetcode-Database-176-Second Highest Salary-Easy(转)
查看>>
构建Docker Compose服务堆栈
查看>>
最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
查看>>
Hadoop生态圈-Kafka常用命令总结
查看>>
如何基于Redis Replication设计并实现Redis-replicator?
查看>>
浮点数内存如何存储的
查看>>
贪吃蛇
查看>>
EventSystem
查看>>
用WINSOCK API实现同步非阻塞方式的网络通讯
查看>>
玩一玩博客,嘿嘿
查看>>
Ubuntu设置python3为默认版本
查看>>
JsonCpp 的使用
查看>>
问题账户需求分析
查看>>
JavaSE-代码块
查看>>
爬取所有校园新闻
查看>>
32、SpringBoot-整合Dubbo
查看>>