您的位置:首页 > 其它

条款17 以独立语句将new对象置入智能指针

2015-09-05 13:47 246 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: