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());
相关文章推荐
- 如何使用C/C++为Python编写DLL/SO
- c++指针
- C++13.1 复制构造函数-----临时对象(不是很懂)
- JNI之—— Eclipse配置C/C++开发环境
- VC++图像处理软件
- C++ 第13章 复制控制---复制构造函数、赋值操作符、析构函数
- c++中static总结
- Effective C++ 条款16
- c++ 智能指针用法详解
- C语言深度剖析
- c语言中通过指针将数值赋值到制定内存地址
- C语言的基本输入与输出函数(全解)
- GFX游戏引擎衔接文件简述(一)c++代码部分
- 【C++】explicit构造函数
- C++11新特性总结
- 单片机生成随机数的方法总结
- C++对象、对象数组的排序
- Android C++中线程同步实现
- C语言:stat,fstat和lstat函数
- C++ 虚函数表解析