C++以对象管理资源
来源:互联网 发布:开淘宝卖零食要什么证 编辑:程序博客网 时间:2024/05/21 17:30
以下转自:http://www.cnblogs.com/kane0526/p/3612428.html
先看下面一段代码:
class Node {};Node* CreateNode(){ }void Solve(){ Node *p=CreateNode(); //调用CreateNode函数 ... delete p; //释放资源}
这样释放资源(delete)做法是正确的。
但是,我们怎么能保证其他人在利用这个代码时在delete之前会不会使用continue语句或者return语句跳过delete,这样一来的话不就无法释放资源浪费资源了吗。
有什么办法呢?即在程序结束之前一定会自动释放资源。
auto_ptr(智能指针):其析构函数自动对其所指的函数调用delete。
void Solve(){ std::auto_prt<Node>p(CreateNode()); ... ///经由auto_ptr析构函数自动删除p对象}
它还有另外一个性质:即通过copy构造函数或者copy assignment函数对他们进行复制操作时,它们会变成null,而复制所得的指针将拥有对资源的唯一支配权。
void Solve(){ std::auto_prt<Node>p1(CreateNode()); std::auto_prt<Node>p2(p1); //p2指向对象,p1为null p1=p2; //p1指向对象,p2为null}
通过上面的例子藐视auto_ptr智能指针的弊端已经显露出来了,即无法行使正常的复制行为。
怎么办?看下面。
tr1::shared_ptr(引用计数智慧指针):它不仅拥有auto_ptr智能指针的功能,最重要的是它还能进行复制行为。
void Solve(){ std::tr1::shared_ptr<Node>p1(CreateNode()); std::tr1::shared_ptr<Node>p2(p1); //p1和p2指向同一对象 p1=p2; //p1和p2指向同一对象 ... //p1,p2同时被销毁,它们所指的对象也被自动销毁}
记住:
1、为防止资源泄露,请使用RAII对象。它们在构造函数过程中获得资源,并在析构函数过程中释放资源。
2、两个常用的RAII classes分别是auto_ptr,tr1::shared_ptr,后者更佳。
0 0
- 以对象管理资源
- C++内存管理------>以对象管理资源(Effective C++)
- 【C++】动态内存管理(二)以对象管理资源
- 【Effective c++】条款13:以对象管理资源
- 《Effective C++》学习笔记条款13 以对象管理资源
- Effective C++——》条款13:以对象管理资源
- Effective C++:条款13:以对象管理资源
- 《Effect C++》学习------条款13:以对象管理资源
- 读书笔记《Effective C++》条款13:以对象管理资源
- <Effective C++> (Item 13-15): 以对象管理资源
- 以对象来管理资源
- item13: 以对象管理资源
- C++以对象管理资源
- [C++]以对象管理指针
- 条款13:以对象管理资源
- 条款13:以对象管理资源
- 以对象管理资源----智能指针
- 以对象管理资源------auto_ptr shared_ptr
- spring security4 实例(小菜完整版)
- 在VM虚拟机上安装VMWARE TOOLS
- Win7+Ubuntu(EasyBCD硬盘安装)
- LSM-Tree (BigTable 的理论模型)
- Java基础理论--异常处理
- C++以对象管理资源
- Flag属性
- 前端性能优化:循环优化二,循环展开
- Previous operation has not finished,SVN cleanup出错解决办法
- C语言 continue的用法及注意事项
- 问题集
- Linux进程基础
- 函数linphone_core_invite_address_with_params分析
- Danger is My Middle Name – Experimenting with SSL Vulnerabilities in Android Apps 阅读笔记