以独立语句将newed对象置入智能指针
看下面的例子:
1 | class Widget { ... }; |
在调用processWidget函数之前,编译器创建代码会做三件事:
1、调用priority
2、执行”new Widget”
3、调用std::share_ptr的构造函数
但是C++编译器以什么样的次序完成这件事是不确定,唯一确定的顺序是”new Widget”一定在调用std::share_ptr的构造函数之前,编译器有可能在第二步执行调用priority函数。如果此时priority函数的调用发生异常,此时”new Widget”返回的指针可能将会遗失,此时可能引发资源泄漏。为了避免这个问题,最好把创建Widget的语句单独拿出来:
1 | void main() { |