以独立语句将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());

最新文章

  1. Java分页需求
  2. JQ_浏览器窗口改变触发
  3. 绿色 或者 免安装 软件 PortableApps
  4. 消灭Bug!18款最佳的问题跟踪管理应用程序
  5. Expression&lt;Func&lt;T,TResult&gt;&gt;和Func&lt;T,TResult&gt;
  6. Spring MVC 环境搭建(二)
  7. SQL语句查找重复记录
  8. MAC下配置gradle用eclipse 打包android程序
  9. P0口上拉电阻选择
  10. 关于plist文件
  11. Echache整合Spring缓存实例讲解(转)
  12. HTML基础学习(二)&mdash;CSS
  13. cocos2dx - 环境配置,项目创建
  14. node.js和express创建服务器
  15. 02-oracle中的基础sql
  16. CentOS Linux 升级内核步骤和方法(转)
  17. CAD版本 注册表信息
  18. 【死磕jeesite源码】mybatis动态调用表名和字段名
  19. Duolingo 提高用户留存率的6个手段
  20. 得到Revit子窗体

热门文章

  1. bzoj 1111 - 四进制的天平
  2. 开车旅行(NOIP2012)
  3. MFC 将 &#39;当前工作路径&#39; 改为 &#39;exe所在路径&#39;(转)
  4. [leetcode]Convert Sorted Array to Binary Search Tre
  5. 如何在Android 或Linux 下,做Suspend /Resume 的Debug【转】
  6. 查看 Laravel 的 SQL 语句的方法
  7. Vue.js 2使用中的难点举例--子组件,slot, 动态组件,事件监听
  8. 达梦数据库CAST与ROUND函数
  9. UbuntuMate开机自动启动ssh服务
  10. (8)oracle 表的增删改