条款17 以独立语句将new对象置入智能指针
2015-09-05 13:47
316 查看
#include<iostream> #include<memory> using namespace std; class Widget{ }; int priority(){//优先级处理 return 1; } void processWidget(shared_ptr<Widget>pw, int priority){ } int main(){ //------------------------ //processWidget(new Widget, priority());//1 智能指针的构造为explicit不支持隐式转换 //---------------------- //processWidget(shared_ptr<Widget>(new Widget), priority()); /*上面全用了对象管理式资源 在调用仍可能泄漏资源原因如下 : 1 首先编译器产生调用码之前 必须首先核算各个实参 1.1 priority()函数的调用 1.2 shared_ptr<Widget>(new Widget> 分两步,new Widget 1.3 调用shared_ptr构造函数 c++编译器是以什么样的次序完成上面三步? 弹性很大。。。java和C#总是以特定次序完成函数参数的核算 假设:2 1 3 的次序执行,并且 1 在调用时导致异常会发生什么?? 恩,new出来的指针将会遗失 解决:为了避免上述情况发生 是以独立语句将new对象存置入智能指针内 */ //-------------- shared_ptr<Widget>pw(new Widget); processWidget(pw, priority()); system("pause"); return 0; }
相关文章推荐
- quick-cocos2d-x数据存储之GameState
- spring Bean的生命周期
- 《剑指Offer》面试题:合并两个排序的链表
- linux配置java环境变量(详细)
- 哗啦啦族的24点游戏(DFS)
- hdu 2577 dp
- 第10章 信号
- 野人学Android基础篇之四大组件第一课--Activity的Intent传递
- Linux下JDK环境变量配置
- 黑马程序员java之网络通讯
- JavaScript四种跨域方式详解
- 命运永远都掌握在我们自己的手中
- android学习笔记(15)Android消息机制
- BIT
- 浅谈人生中的失败与成功
- URLConnection用法详情
- 多个表格头合并编辑获取表格内元素内容
- 数据结构 - 排序
- 从零开始学JAVA DAY9
- 做一个像狼一样的男人