Item 11:在赋值操作符中处理自我赋值【effective C++读书笔记】
来源:互联网 发布:数据存储安全 编辑:程序博客网 时间:2024/06/06 03:37
在使用赋值操作符时要注意防止自我赋值的情况发生,例如
a[j] = a[i]; //是否可能存在i=j的情况
*px = *py; //是否可能指向相同
处理方法如下:
①在函数开头先进行判断(证同测试),确定值不等再进行赋值操作
② 实现异常安全性的同时避免自我赋值问题,详见Item 29(异常安全)。这是一个常见且足够好的赋值操作符撰写方法:
class Widget{
…
void swap(Widget& rhs); //交换*this和rhs的数据,详见Item 29
…
};
Widget& Widget::operator=(const Widget& rhs) //引用
{
Widget temp(rhs); //为rhs制作一份副本
swap(temp); //将*this数据与上述副本的数据交换
return *this;
}
或
Widget& Widget::operator=(const Widget rhs) //值传递的方式,直接为副本
{
swap(rhs); //将*this数据与副本的数据交换
return *this;
}
阅读全文
0 0
- Item 11:在赋值操作符中处理自我赋值【effective C++读书笔记】
- 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
- 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
- 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
- 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
- Effective C++ 条款11 在赋值操作符operator=中处理“自我赋值”
- Effective C++ Item 11 在operator= 中处理“自我赋值”
- Effective C++ Item 11-在operator = 中处理"自我赋值"
- effective c++ Item 11 在operator=中处理自我赋值
- 读书笔记《Effective C++》条款11:令operator=中处理”自我赋值“
- Effective C++ 读书笔记 条款11:在operator= 中处理"自我赋值"
- effective C++ 11_在operator= 中处理"自我赋值" 读书笔记
- C++中在operator=中处理“自我赋值”(11)---《Effective C++》
- 【Effective c++】条款11:在operator=中处理“自我赋值”
- 《Effective C++》学习笔记条款11 在operator =中处理“自我赋值”
- Effective C++——》条款11:在operator=中处理自我赋值
- Effective C++:条款11:在operator= 中处理“自我赋值”。
- Effective C++读书笔记之十一:在operator=中处理“自我赋值”
- day7_类的重要方法和socket基础
- 菱形和水仙花数
- python 3.x 字典的11种方法
- Codeforces --- Mahmoud and Ehab and the MEX
- 深入了解PHP【生命周期】
- Item 11:在赋值操作符中处理自我赋值【effective C++读书笔记】
- VisualSVN Server v3.7
- Android 退出登录功能
- 二进制数中返回1的个数的几种方法
- Codeforce 862B Mahmoud and Ehab and the bipartiteness (二分图染色 + 链式前向星)
- 大整数的乘法
- Codeforces 862C
- 基于Spring session 和 redis 的session共享问题
- 自己动手简单实现CountDownLatch