c++设计中可以利用析构函数避免泄露资源
来源:互联网 发布:数据库sql语句大全 编辑:程序博客网 时间:2024/06/03 23:24
假设有这样一个函数
B::virtual void fun(int i)
{
while(i--)
{
A* ptr=readdata(i);//其中A为抽象基类
ptr->fun1();//假设fun1是A中的纯虚函数
delete ptr;
}
}
对于上面的代码,当ptr->fun1();出了异常,则程序永远不会delete ptr,造成资源的泄漏。
要避免这一点,可以这样写
B::virtual void fun(int i)
{
while(i--)
{
A* ptr=readdata(i);
try{
ptr->fun1();
}
catch(...){
delete ptr;
throw();
}
delete ptr;//没有异常抛出时,delete ptr
}
}
这样很麻烦,delete ptr 重复了。
解决办法:
以一个“类似指针的对象”取代指针(智能指针)。
我们可以在智能指针的析构函数中将指针delete。
因为,局部对象总是在函数结束时被析构。
c++中的智能指针:auto_ptr、shared_ptr.weak_ptr、unique_ptr
参考自more effective c++。
阅读全文
0 0
- c++设计中可以利用析构函数避免泄露资源
- C++中利用析构避免资源泄露(RAII技术)
- 条款九:利用析构函数避免内存泄露
- c++设计中可以利用重载避免隐式类型转换
- 在构造函数中避免资源泄漏
- C++在构造函数中防止资源泄露(9)---《More Effective C++》
- C/C++内存泄露--工程中如何尽量避免
- 7.使用析构函数防止资源泄露
- android中避免内存泄露
- 避免内存泄露, 有效利用内存
- TraceView + 避免内存泄露, 有效利用内存
- TraceView + 避免内存泄露, 有效利用内存
- 避免内存泄露, 有效利用内存 !
- 如何在.net应用中发现和避免内存和资源泄露
- 如何在.net应用中发现和避免内存和资源泄露
- 如何在.net应用中发现和避免内存和资源泄露
- 如何在.net应用中发现和避免内存和资源泄露
- 可以利用的资源
- HDU 4135 Co-prime(容斥原理+分解质因数)
- APUE(1) ---- apue.h头文件记录
- mybatis的xml配置文件中使用select语句数据不全
- 判断一棵树是否是完全二叉树和求二叉树中两个节点的最近公共祖先——题集(十三)
- IDEA下SSM框架项目笔记三
- c++设计中可以利用析构函数避免泄露资源
- A+B for Input-Output Practice (V)
- JavaScript 代码检查工具对比
- Python通过pysnmp和nmap获取netstat
- 20170728
- POJ.3126 Prime Path (BFS)
- day16剑指offer---重建二叉树
- Eclipse下导入外部jar包的3种方式
- epoll回声Server端实现