码迷,mamicode.com
首页 > 编程语言 > 详细

Effective C++ 条款17

时间:2017-07-30 17:07:57      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:pretty   data-   ptr   print   构造   pen   split   .text   函数   

以独立语句将newed对象置入智能指针

本节我们须要学习的知识核心是注意编译器在同一语句中,调用次序具有不确定性,不同语句中,调用次序确定。
上面的话什么意思?
请看下面代码:

int priority();
int processWidget(shared_ptr<Widget> pw, int priority);
processWidget(shared_prt<Widget> pw(new Widget), priority());

以上代码运行三个行为,各自是
1、运行priority()函数
2、运行new Widget
3、运行shared_ptr构造函数
大家知道这三个行为顺序吗?
我想没人敢非常自信的说顺序是什么,由于编译器在运行时,对以上三个行为的运行次序是不确定的。唯一确定的次序就是2行为在3行为之后。

假设,运行次序是2、1、3.那么当函数priority()调用出现异常。new Widget返回的指针还没来得及放入shared_ptr中。这样会造成内存泄露。

所以,我们在编程的时候,最好将紧密行为单独编写为单一语句。


例如以下:

shared_prt<Widget> pw(new Widget);
processWidget(pw,priority());

Effective C++ 条款17

标签:pretty   data-   ptr   print   构造   pen   split   .text   函数   

原文地址:http://www.cnblogs.com/clnchanpin/p/7259245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!