Effective C++ --2 构造/析构/赋值运算
上一部分Effective C++ --1 让自己习惯C++
5、 了解C++默认编写并调用哪些函数
(1) 编译器暗自为类创建默认构造函数、拷贝构造函数、拷贝赋值函数和析构函数。
(2) 拷贝构造函数中对于内置类型通过拷贝bits来进行初始化,非内置类型通过调用成员变量的拷贝构造函数来进行初始化。
(3) 对于内含指针成员的类编译器不会生出赋值操作,必须自己定义拷贝赋值函数。
6、 若不想使用编译器自动生成的函数,就该明确拒绝
(1) 编译器暗自创建的函数都是public,如果要阻止拷贝赋值等,必须明确声明为private,可以不予实现。
(2) 也可以使用不能进行赋值拷贝等操作的基类。
7、 为多态基类声明virtual析构函数
(1) 为了防止派生类对象经由一个基类指针被删除时,派生的部分没有被释放的问题,需要把基类的析构函数声明为virtual,此时调用派生类的析构函数。
(2) 如果一个类带有任何virtual函数,它就应该拥有一个virtual析构函数;不用作基类使用的类,不应该声明virtual析构函数。
8、 别让异常逃离析构函数
(1) 析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下或者结束程序。
(2) 如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么类应该提供一个普通函数(而非在析构函数中)执行该操作。
9、 绝不在构造和析构过程中调用virtual函数
(1) 在基类构造期间,virtual函数不再是virtual函数,不具有多态作用,只是调用基类的函数而已。
10、令operate= 返回一个referece to *this
(1) 为了实现连锁赋值,赋值操作符必须返回一个reference指向操作符的左侧实参。
11、在operator中处理“自我赋值”
(1)防止自我赋值将值销毁的问题,注意赋值的顺序,也可以加一个“证同测试”来检验是否是自我赋值,这样可以提高效率。
12、复制对象时勿忘其每一个成分
(1)当为class添加一个成员变量时,别忘了同时修改copying函数。
(2)copying函数应确保复制对象内所有的local成员变量,调用所有的基类的适当copying函数。
(3)copy 构造函数和copy赋值函数不要相互调用,为了消除重复代码可以另写一个函数供两者调用。
Effective C++ --2 构造/析构/赋值运算相关推荐
- 读书笔记 Effective C++: 02 构造析构赋值运算
条款05:了解C++默认编写并调用的哪些函数 编译器会为class创建: 1. default构造函数(前提是:没有定义任何构造函数): 如果已经声明了一个构造函数,编译器就不会再创建default构 ...
- 构造/析构/赋值运算--龙之介《Effective C++》实验室
条款5:了解C++默默编写并调用哪些函数 编译器可以暗自为class创建default构造函数,copy构造函数,copy assignment操作符 但是c++拒绝编译那一行赋值动作.你不会自动co ...
- Effective C++ -- 构造析构赋值运算
05.了解C++默默编写并调用哪些函数 编译产生的析构函数时non-virtual,除非这个类的基类析构函数为virtual 成员变量中有引用和const成员时,无法自己主动生成copy assign ...
- Effective C++ 之《构造/析构/赋值运算》
条款05:了解C++默默编写并调用了哪些函数 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 条款07:为多态基类声明virtual析构函数 1. 带多态性质的父类,应该声明一个virtual ...
- Effective C++学习笔记——构造/析构/拷贝运算
条款9:决不再构造和析构过程中调用virtual函数,包括通过函数间接调用virtual函数. 应用:想在一个继承体系中,一个derived class被创建时,某个调用(例如生成相应的日志log)会 ...
- 声明及赋值_重述《Effective C++》二——构造、析构、赋值运算
关于本专栏,请看为什么写这个专栏.如果你想阅读带有条款目录的文章,欢迎访问我的主页. 构造和析构一方面是对象的诞生和终结:另一方面,它们也意味着资源的开辟和归还.这些操作犯错误会导致深远的后果--你需 ...
- 《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学
<深度探索C++对象模型>读书笔记第五章:构造析构拷贝语意学 对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constr ...
- 【从零学习OpenCV 4】Mat类构造与赋值
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...
- C++学习笔记-----在重载的赋值运算函数中调用拷贝构造函数
类的拷贝构造函数与赋值运算不同,拷贝构造函数是对这个类进行初始化的过程,而赋值是删除原有的东西,赋予它新的东西. 但是二者在实现上是互通的. template<class T> graph ...
最新文章
- 常玩手机会导致手指残疾? 专家称没依据
- 开发日记-20190823 linux有名管道fifo,进程间通信
- C#中图片.BYTE[]和base64string的转换
- cnn卷积神经网络_卷积神经网络(CNN)原理及应用
- 【Android 界面效果22】Android的Tab与TabHost
- 用MDT 2012为企业部署windows 7(十一)--抓取标准模板机镜像
- Codeforces 1004F Sonya and Bitwise OR (线段树)
- Linux 跟踪进程对CPU的占用情况,对内存的占用情况
- 常见网盘和云存储测评和使用方式
- 【LeetCode】【字符串】题号:*389. 找不同
- 【C语言】abs()用法及其他绝对值函数
- C语言 自定义数据类型(结构体 typedef 共用体 位段 枚举)
- 自己总结的数据库系统概论笔记,需要的拿去用
- 程序员微信名昵称_2020最火的微信名有哪些 好听的微信名字推荐
- Selenium(一)12.Actions的常用方法
- 如何将ppt演示文稿上传到微信公众号?
- 在线思维导图Processon部分截图
- python时间间隔标准化输出_利用Python将时间或时间间隔转为ISO 8601格式方法示例...
- bootstrap-datepicker只选择年份
- 水晶苍蝇拍(14):战胜人性,值得珍藏的投资感悟!