重载赋值运算符(operator =)及swap
来源:互联网 发布:虚拟座机号码软件 编辑:程序博客网 时间:2024/06/05 21:53
1. operator= 返回一个reference to *this, 即重载赋值运算符时要返回*this对象的引用
2. 在operator =中处理“自我赋值”, 即重载赋值运算符时要尽量考虑当传递的参数是自身对象时的情况, eg:
if(this = &meb) return *this
3. swap操作
(1) 容器类的swap函数: vector.swap(meb)
不会删除原始数据也不会申请新的空间, 且迭代器也不会失效(我的理解是只是交换读取数据的指针位置),所以速度会很快(2) 泛型算法的swap函数: std:swap(meb1,meb2)
例:String& operator=(String rhs) // yes, pass-by-value{ swap(rhs); return *this;}
void swap(String& rhs){ std::swap(data_, rhs.data_);}(a) String &, 返回*this对象的引用
(b) String rhs, 使用值传递而不使用引用的方式传递参数的是由于之后会使用swap函数, 那么this->data_会窃取rhs.data_的资源,反之rhs.data_也是, 但由于this->data_并没有申请空间, 所以此时rhs.data_指向了空, 破坏了传进来的数据. 而使用值传递方式, 会创建一个临时对象, 而this->data_是窃取的临时对象的资源, 而临时对象本来重载函数调用之后就会回收,所以也没有其他影响.
(3) 如果rhs是this对象本身,也不要紧, 因为传进来跟不是this对象, 而是拷贝this对象的临时对象.
Reference
[1] 《Effective C++》学习笔记条款10 令operator= 返回一个reference to *this[2] C++面试中string类的一种正确写法
0 0
- 重载赋值运算符(operator =)及swap
- 一文说尽C++赋值运算符重载函数(operator=)
- 一文说尽C++赋值运算符重载函数(operator=)
- 一文说尽C++赋值运算符重载函数(operator=)
- 深入分析C++赋值运算符重载函数(operator=)
- 一文说尽C++赋值运算符重载函数(operator=)
- C++读书笔记之重载赋值运算符 overload assignment operator
- void operator=(const CClass&) 和 CClass& operator=(const CClass&)两种赋值运算符重载的区别
- operator重载运算符
- operator 运算符重载
- operator运算符重载
- operator重载运算符
- c++中不同类之间的赋值(重载运算符= 即operator =)
- 赋值运算符函数 operator=
- 重载赋值操作operator=()
- 重载赋值运算符=
- C++运算符重载(operator)
- C++重载运算符operator
- Trace、Debug和TraceSource与调试及日志设计
- Java或Web中解决所有路径问题
- ZOJ-1902
- iOS 5 取景器和实时滤镜的制作(AVCaptureSession 讲解的很不错感觉)
- c# 枚举类型
- 重载赋值运算符(operator =)及swap
- pdf 预览
- 中古保存布局
- codeforce 221 Div2 C - Divisible by Seven
- 获取文件完整路径并存储(拖放操作)
- 杭电acm_2013
- Effective Java (4) - 通过私有构造器强化不可实例化的能力
- android
- 2013结束