您的位置:首页 > 编程语言 > C语言/C++

Effective C++ 条款17

2015-06-24 15:43 423 查看

以独立语句将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());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: