Effective C++ 条款17:以独立语句将newd的对象放进智能指针
2018-01-21 13:49
302 查看
以独立语句将new出来的对象存储于智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露
processWidget(shared_ptr<Widget> (new Widget),priority());
执行分两部分:
1.new Widget;
2.调用shared_ptr的构造函数
3.调用priority()
但是由于C++语言的取参数的次序弹性大,无法总是以特定次序进行,
所以当出现
1.new Widget;
2.调用priority;
3.调用shared_ptr的构造函数
如果调用priority失败抛出异常
则new出来的资源将会无对象支配导致资源泄露。
所以一个良好的解决方法是:
shared_ptr<Widget> pw(new Widget);在单独语句内以智能指针存储new来的对象
processWidget(pw,priority);这样才不会导致资源泄露
补充:之所以这样行得通,因为编译器对于“跨越语句的各项操作”没有重新排列的自由
(只有在语句内它才有那样的自由度)。在上述修订后的代码内,“new Widget”表达式以及
对“对shared_ptr构造函数的调用”这两个动作,和“对priority的调用”是分隔开来的,
位于不同语句内,所以编译器不得在它们之间任意选择执行次序。
processWidget(shared_ptr<Widget> (new Widget),priority());
执行分两部分:
1.new Widget;
2.调用shared_ptr的构造函数
3.调用priority()
但是由于C++语言的取参数的次序弹性大,无法总是以特定次序进行,
所以当出现
1.new Widget;
2.调用priority;
3.调用shared_ptr的构造函数
如果调用priority失败抛出异常
则new出来的资源将会无对象支配导致资源泄露。
所以一个良好的解决方法是:
shared_ptr<Widget> pw(new Widget);在单独语句内以智能指针存储new来的对象
processWidget(pw,priority);这样才不会导致资源泄露
补充:之所以这样行得通,因为编译器对于“跨越语句的各项操作”没有重新排列的自由
(只有在语句内它才有那样的自由度)。在上述修订后的代码内,“new Widget”表达式以及
对“对shared_ptr构造函数的调用”这两个动作,和“对priority的调用”是分隔开来的,
位于不同语句内,所以编译器不得在它们之间任意选择执行次序。
相关文章推荐
- Effective C++:条款17:以独立语句将newed对象置入智能指针
- Effective C++ 条款17 以独立语句将newed对象置入智能指针
- 《Effective C++》学习笔记条款17 以独立语句将newed对象置入智能指针
- 读书笔记《Effective c++》 条款17 以独立语句将newed对象置入智能指针
- Effective C++ 条款17 以独立语句将newed对象置入智能指针
- Effective C++ -----条款17:以独立语句将newed对象置入智能指针
- effective c++ 条款17 :以独立语句将newed 对象置入智能指针
- effective C++ 条款 17:以独立语句将newed对象置入智能指针
- 《Effective C++》——条款17:以独立语句将newed对象置入智能指针
- 读书笔记《Effective C++》条款17:以独立语句将newed对象置入智能指针
- effective C++ 读书笔记 条款17 以独立语句讲newed对象置入智能指针
- 条款17:以独立语句将NEWED对象置入智能指针
- 条款17:以独立语句将newed对象置入智能指针
- C++之以独立语句将newed对象置入智能指针(17)---《Effective C++》
- 条款17:以独立语句将newed对象置入智能指针
- 条款17:以独立语句将newed对象置入智能指针
- 条款17:以独立语句将newed对象置入智能指针
- 条款17 以独立的语句将newed对象置入智能指针
- 《Effect C++》学习------条款17:以独立语句将Newed对象放置入智能指针
- Effective C++——》条款17:以独立语句将newed的对象置入智能指针