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

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值