effective c++ 以对象管理资源
来源:互联网 发布:欧迪臣bit one软件 编辑:程序博客网 时间:2024/05/17 22:11
void f(){ Investment *p = creatInvestment(); //......... delete p;}
1.如果在…中有一个return
2.在…中抛出了一个异常
3.或者delete动作位于某个循环中,被continue,或者goto
就会泄漏p指向的那块资源。
为确保creatInvestment()返回的资源总是被释放掉,我们需要将资源放入对象内,当控制流离开f,该对象的析构函数会自动释放那些资源
1.获得资源后立即放进管理对象内
2.管理对象运用析构函数确保资源被释放
void f(){ auto_ptr<Investment>p(creatInvestment()); //.........}
auto_ptr被销毁时会自动删除他的所指之物,所以不要让多个auto_ptr同时指向一个对象。
一个对象被删除一次以上,那便会是未定义行为
若通过copy构造函数或者copy assignment操作符复制他们,他们就会变成null,而复制所得的指针将取得资源的唯一拥有权
auto_ptr<Investment>p(creatInvestment());auto_ptr<Investment>p2(p1);//p2指向对象,p1指向nullp = p2;//p2指向null,p1指向对象
shared_ptr是引用计数型智慧指针,持续追踪共有多少个对象指向某笔资源,并在无人指向它时自动删除资源
void f(){ shared_ptr<Investment>p(creatInvestment()); //.........}//经由shared_ptr的析构函数自动删除p
shared_ptr的复制行为就正常多了
void f(){ shared_ptr<Investment>p(creatInvestment()); shared_ptr<Investment>p2(p1);//p2,p同时指向对象 p = p2;//依旧 //.........}
auto_ptr和shared_ptr两者都在析构函数内做delete而不是delete[]动作,那意味着在动态分配而得的array身上使用auto_ptr和shared_ptr是个馊主意
0 0
- C++内存管理------>以对象管理资源(Effective C++)
- 【Effective c++】条款13:以对象管理资源
- 《Effective C++》学习笔记条款13 以对象管理资源
- Effective C++——》条款13:以对象管理资源
- Effective C++:条款13:以对象管理资源
- 读书笔记《Effective C++》条款13:以对象管理资源
- <Effective C++> (Item 13-15): 以对象管理资源
- Effective C++ ----以对象管理资源
- Effective C++读后感:以对象管理资源
- effective c++ 以对象管理资源
- C++中以对象管理资源<auto_ptr>(13)---《Effective C++》
- Effective C++(13) 用对象管理资源
- Effective C++ 条款13学习笔记:以对象管理资源
- Effective C++ 学记之13 以对象管理资源
- Effective C++ 条款13 以对象管理资源
- Effective C++ Item 13 以对象管理资源
- Effective C++读书笔记之十三:以对象管理资源
- effective C++ 读书笔记 条款14 以对象管理资源
- 安卓控件使用系列17:ImageView获取网络图片
- Ubuntu 虚拟机网络问题
- 如何启用/开启本机的IIS服务
- MySQL主从Replication同步&&半同步&&主主复制架构
- ubuntu下安装shadowsocks
- effective c++ 以对象管理资源
- Mybatis系列(八)集合映射
- K-means算法
- 多线程
- 安装maven
- 【白乔原创】写二十年的代码是一种什么样的体验?
- Java设计模式之迭代器模式和组合模式
- Java注解阐述
- butterknife+dagger+otto+okhttp+picasso+retrofit+rxjava示例项目