第三章:构造函数,析构函数和赋值操作(Effective C++ Second Edition 读书笔记)
来源:互联网 发布:怎么判断usb2.0端口 编辑:程序博客网 时间:2024/05/16 04:42
类的构造函数,析构函数,赋值函数,拷贝函数需要特别注意,因为这几个操作常常隐藏在日常变量操作中。
重点:为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符(条款11)
1) 要写自己版本的拷贝构造函数和赋值操作符函数,或者,声明为private成员,而不去定义(实现)它们。这就防止了会有人去调用它们,也防止了编译器去生成它们。2) 采用某种引用计数机制去跟踪当前有多少个对象指向某个数据结构。
条款12: 尽量使用初始化而不要在构造函数里赋值
评论:通过成员初始化列表来进行初始化总是合法的,比在构造函数体内赋值高效。
条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
评论:类成员是按照它们在类里被声明的顺序进行初始化的,和它们在成员初始化列表中列出的顺序没一点关系。
条款14: 确定基类有虚析构函数
评论:虚析构函数工作的方式是:最底层的派生类的析构函数最先被调用,然后各个基类的析构函数被调用。
重点:operator=函数使用的几点规范(条款15,16,17)
1) 让operator=返回*this的引用(条款15)
注释:当定义自己的赋值运算符时,必须返回赋值运算符左边参数的引用,*this。如果不这样做,就会导致不能连续赋值,或导致调用时的隐式类型转换不能进行,或两种情况同时发生。
2) 在operator=中对所有数据成员赋值(条款16)
注释:当类里增加新的数据成员时,也要记住更新赋值运算符函数; 继承类得赋值函数里面必须显示调用基类的赋值函数。
3) 在operator=中检查给自己赋值的情况(条款17)
注释1:如果可以在赋值运算符函数体的首部检测到是给自己赋值,就可以立即返回,从而可以节省大量的工作,否则必须去实现整个赋值操作。
注释2:保证正确性。如果一个赋值运算符必须首先释放掉一个对象的资源(去掉旧值),然后根据新值分配新的资源。在自己给自己赋值的情况下,释放旧的资源将是灾难性的,因为在分配新的资源时会需要旧的资源。
注释:处理方法,在operator=函数中增加,*this的判断,如果一致,表明是同一个实例,不需要赋值。
if (*this == rhs) return *this;
第一章:从C转向C++ (Effective C++ Second Edition 读书笔记)
第二章:内存管理(Effective C++ Second Edition 读书笔记)
第三章:构造函数,析构函数和赋值操作(Effective C++ Second Edition 读书笔记)
第四章 类和函数:设计与声明(Effective C++ Second Edition 读书笔记)
第五章 类和函数:实现(Effective C++ Second Edition 读书笔记)第六章 继承和面向对象设计 (Effective C++ Second Edition 读书笔记)
- 第三章:构造函数,析构函数和赋值操作(Effective C++ Second Edition 读书笔记)
- 第四章 类和函数:设计与声明(Effective C++ Second Edition 读书笔记)
- 第五章 类和函数:实现(Effective C++ Second Edition 读书笔记)
- 第三章 构造函数,析构函数,赋值操作符
- Effective c++(笔记) 中关于构造函数、析构函数以及赋值操作符的知识
- [翻译] Effective C++, 3rd Edition, Chapter 2. Constructors(构造函数),Destructors(析构函数)与 Assignment Operators(赋值运算符)
- 第三章 构造函数,析构函数和赋值操作符
- EffectiveC++第三章构造函数析构函数和赋值操作符学习笔记
- <<Effective C++>>读书笔记2: 构造/析构/赋值函数
- Effective C++ 2e: 构造函数,析构函数和赋值操作符
- Effective C++笔记(3) 构造函数,析构函数和赋值操作符
- Effective c++ : 构造函数,析构函数和赋值操作符
- Effective C++ 总结3 构造函数,析构函数和赋值操作符 (条款11 - 17)
- Effective C++摘要《第3章:构造函数、析构函数、赋值操作符》20090207
- Effective C++(二)构造、析构和赋值操作
- effective C++ 第三章:C++构造、析构和赋值
- 条款11:为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符 (第三章 构造函数,析构函数和赋值操作符)
- 第二章:内存管理(Effective C++ Second Edition 读书笔记)
- 虚拟化技术的分类
- EdgeRank杂谈
- 调整android dialog对话框显示位置
- SQL重复记录查询
- jquery获取json对象属性
- 第三章:构造函数,析构函数和赋值操作(Effective C++ Second Edition 读书笔记)
- 学习android驱动开发必须记住的几个linux 命令
- OD中条件断点的设置方法
- 水浒传108将之死
- 网传腾讯大规模裁员测试工程师,腾讯相关人员否认
- Cypher查询语言--Neo4j中的SQL(6)
- mysql语句中用if的例子_数据库技巧
- 利用Android的Log 演示一个activity的生命周期
- delphi 国腾GTICR100 二代身份证的读取