Effective C++ 条款17
2024-09-29 10:22:30
以独立语句将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());
最新文章
- Java分页需求
- JQ_浏览器窗口改变触发
- 绿色 或者 免安装 软件 PortableApps
- 消灭Bug!18款最佳的问题跟踪管理应用程序
- Expression<;Func<;T,TResult>;>;和Func<;T,TResult>;
- Spring MVC 环境搭建(二)
- SQL语句查找重复记录
- MAC下配置gradle用eclipse 打包android程序
- P0口上拉电阻选择
- 关于plist文件
- Echache整合Spring缓存实例讲解(转)
- HTML基础学习(二)&mdash;CSS
- cocos2dx - 环境配置,项目创建
- node.js和express创建服务器
- 02-oracle中的基础sql
- CentOS Linux 升级内核步骤和方法(转)
- CAD版本 注册表信息
- 【死磕jeesite源码】mybatis动态调用表名和字段名
- Duolingo 提高用户留存率的6个手段
- 得到Revit子窗体
热门文章
- bzoj 1111 - 四进制的天平
- 开车旅行(NOIP2012)
- MFC 将 &#39;当前工作路径&#39; 改为 &#39;exe所在路径&#39;(转)
- [leetcode]Convert Sorted Array to Binary Search Tre
- 如何在Android 或Linux 下,做Suspend /Resume 的Debug【转】
- 查看 Laravel 的 SQL 语句的方法
- Vue.js 2使用中的难点举例--子组件,slot, 动态组件,事件监听
- 达梦数据库CAST与ROUND函数
- UbuntuMate开机自动启动ssh服务
- (8)oracle 表的增删改