C++为什么在一个表达式中最多只执行一次显式资源分配
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本篇内容主要讲解"C++为什么在一个表达式中最多只执行一次显式资源分配",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++为什么在一个表达式中最多只执行一
千家信息网最后更新 2025年01月24日C++为什么在一个表达式中最多只执行一次显式资源分配
本篇内容主要讲解"C++为什么在一个表达式中最多只执行一次显式资源分配",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++为什么在一个表达式中最多只执行一次显式资源分配"吧!
R.13: 在一个表达式中最多只执行一次显式资源分配
Reason(原因)
如果你在一个表达式中执行两次(或以上的)资源分配,由于包括函数参数在内的子表达式的执行顺序是没有定义的,因此可能导致资源泄露。
Example(示例)
void fun(shared_ptr sp1, shared_ptr sp2);
函数可能被这样调用:
// BAD: potential leak
fun(shared_ptr(new Widget(a, b)), shared_ptr(new Widget(c, d)));
因为编译器可能会调整构建函数参数的两个表达式的执行顺序,这段代码在发生异常时会出问题。通常,编译器会交错执行两个表达式:(使用new进行)两个对象的内存分配可能首先进行,接下来调用两个Widget的构造函数。如果一个调用某个构造函数是抛出异常,那么另一个就永远不会被释放。
这个不易察觉的问题有一个简单的解决方案:永远不在一个表达式中执行两次(含两次)以上的显式资源分配。例如:
shared_ptr sp1(new Widget(a, b)); // Better, but messy
fun(sp1, new Widget(c, d));
最好的解决方案是使用返回管理对象的工厂方法彻底避免显式资源分配。
fun(make_shared(a, b), make_shared(c, d)); // Best
如果目前还不存在,那就自己写工厂包装类。
Enforcement(实施建议)
标记具有多个显式分配资源的表达式(问题是:我们可以识别出多少显式分配资源的情况?)
到此,相信大家对"C++为什么在一个表达式中最多只执行一次显式资源分配"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
表达式
资源
分配
资源分配
函数
两个
C++
问题
内容
参数
对象
工厂
方案
方法
编译器
解决方案
顺序
学习
编译
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
思路很重要网络安全题
北京快鱼网络技术怎么样
邮储网络安全解散群
众辉网络技术有限公司
网络安全主题班会的主题
网络安全 手机失泄密
支付收银软件开发
郑州app软件开发哪家便宜
企业软件开发优化建站
网络安全知识法问答
拜登网络安全顾问
阿里云负责服务器的安全吗
网络安全培训答案
济南欧图欧网络技术有限公司
云服务器 宕机
金华天道网络技术有限公司
软件开发技术路线报告
网络安全的法
北京正规软件开发服务值得推荐
网络安全生产宣传资料
中税网上海网络技术交流学习
高清视频录播服务器器暖
数据库检索前五条
如何修改教务管理数据库
数据库及的安全管理
接收台服务器错误怎么解决
qq好友大数据库设计
数据库前端模式
csgo免费皮肤服务器指令
数据库数据删除撤回