C++中为什么要保证拷贝赋值对自我赋值安全
发表于:2024-09-26 作者:千家信息网编辑
千家信息网最后更新 2024年09月26日,本篇内容介绍了"C++中为什么要保证拷贝赋值对自我赋值安全"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
千家信息网最后更新 2024年09月26日C++中为什么要保证拷贝赋值对自我赋值安全C.62:保证拷贝赋值对自我赋值安全 Reason(原因) Example(示例) Note(注意)
Note(注意)
Enforcement(实施建议)
本篇内容介绍了"C++中为什么要保证拷贝赋值对自我赋值安全"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
如果x=x改变了x的值,人们会觉得很奇怪,同时也会发生很不好的错误。(通常会包含泄露)
标准库容器处理自我赋值的方式优雅且高效:
std::vector v = {3, 1, 4, 1, 5, 9};
v = v;
// the value of v is still {3, 1, 4, 1, 5, 9}
Note(注意)
产生于正确处理了自我赋值的成员的默认的赋值操作会处理自我赋值问题。
struct Bar {
vector> v;
map m;
string s;
};
Bar b;
// ...
b = b; // correct and efficient
Note(注意)
你可以通过明确地对自我赋值进行检查的方式防止自我赋值,但是通常不使用上述检查的处理方式(例如使用swap)的方式更快,更优雅。
class Foo {
string s;
int i;
public:
Foo& operator=(const Foo& a);
// ...
};
Foo& Foo::operator=(const Foo& a) // OK, but there is a cost
{
if (this == &a) return *this;
s = a.s;
i = a.i;
return *this;
}
这种做法看起来安全并且高效。但是如果在一百万次赋值中只发生一次自我赋值的情况下会怎么样呢?大概有一百万次多余的检查(但是由于本质上结果总是一样的,计算机的分支预测会每次都猜对)。考虑下面的代码:
Foo& Foo::operator=(const Foo& a) // simpler, and probably much better
{
s = a.s;
i = a.i;
return *this;
}
std::string对自我赋值安全,int也是。所有的代价都来自(极少)发生的自我赋值。
(简单)赋值运算符不应该包含以下的检查:if (this == &a) return *this;
"C++中为什么要保证拷贝赋值对自我赋值安全"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
安全
方式
处理
检查
拷贝
保证
C++
优雅
内容
情况
更多
知识
实用
学有所成
接下来
不好
人们
代价
代码
做法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发中的工具软件有哪些
洪山区海航网络安全维护价目
怎么查oracle数据库分区
服务器一个月赚多少钱
锐起服务器管理设置
联想密钥管理服务器
成都琥珀网络技术有限公司
神经网络技术分析理论
交通网络安全公益广告视频
落实网络安全宣传情况汇报
三只松鼠软件开发
数据库提示框怎么显示
中间件管理服务器
我叫mt2服务器架设
网络安全法政治文件
在数据库视图中_不可以
分割数据库文件路径
服务器硬盘多少尺寸
网络技术及其应用
什么担任网络安全协调会
未转变者玩服务器能得皮肤吗
流媒体服务器搭建java
网络安全人员职业规划
保障服务器安全稳定的说明
需求出错对软件开发的影响
宁波锦衣连德网络技术有限公司
单例模式的多数据库连接
硬件改软件开发票行嘛
网络安全威胁分析设备绩效目标表
网络技术窃密手段教案