读书笔记:Effective C++ 2.0 版,条款15、16、17(operator=返回*this、全赋值、检查this)

条款15: 让operator=返回*this的引用

c++的设计者bjarne stroustrup想使用户自定义类型尽可能地和固定类型的工作方式相似。所以有重载运算符,类型转换函数、拷贝赋值、拷贝构造函数等。

类c中,缺省版本的operator=函数具有如下形式:

c 复制代码
c& c::operator=(const c&);

注意返回值没有const修饰,虽然可以加,但与缺省形式不一致,并不推荐。

c 复制代码
string&	operator=(const char *rhs);  
这个是为了兼容char*,避免多余的隐式转换,成本变大

条款16: 在operator=中对所有数据成员赋值

这条需要注意派生类赋值时,也带上基类赋值。

c 复制代码
class derived: public base {
public:
  derived(const derived& rhs): base(rhs), y(rhs.y) {}
};

条款17: 在operator=中检查给自己赋值的情况

c 复制代码
c& c::operator=(const c& rhs){
  // 检查对自己赋值的情况
  if (*this == rhs)// 假设operator=存在
    return *this;
  ...
}
也可以考虑用uuid标识唯一对象。

这几个条款都是范式,按照std标准形式即可。

相关推荐
不会c嘎嘎2 小时前
【数据结构】AVL树详解:从原理到C++实现
数据结构·c++
AKDreamer_HeXY3 小时前
ABC434E 题解
c++·算法·图论·atcoder
罗湖老棍子3 小时前
完全背包 vs 多重背包的优化逻辑
c++·算法·动态规划·背包
potato_may3 小时前
C++ 发展简史与核心语法入门
开发语言·c++·算法
爱装代码的小瓶子4 小时前
【cpp知识铺子】map和set的前身-二叉搜索树
c++·算法
Embedded-Xin4 小时前
Linux架构优化——spdlog实现压缩及异步写日志
android·linux·服务器·c++·架构·嵌入式
[J] 一坚4 小时前
华为OD、微软、Google、神州数码、腾讯、中兴、网易有道C/C++字符串、数组、链表、树等笔试真题精粹
c语言·数据结构·c++·算法·链表
我不会插花弄玉4 小时前
c++入门基础【由浅入深-C++】
c++
不会编程的小寒4 小时前
C and C++
java·c语言·c++
hewayou4 小时前
MFC +Com+ALT工程报 内存泄漏
c++·mfc·内存泄漏·com技术