上一部分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 构造/析构/赋值运算相关推荐

  1. 读书笔记 Effective C++: 02 构造析构赋值运算

    条款05:了解C++默认编写并调用的哪些函数 编译器会为class创建: 1. default构造函数(前提是:没有定义任何构造函数): 如果已经声明了一个构造函数,编译器就不会再创建default构 ...

  2. 构造/析构/赋值运算--龙之介《Effective C++》实验室

    条款5:了解C++默默编写并调用哪些函数 编译器可以暗自为class创建default构造函数,copy构造函数,copy assignment操作符 但是c++拒绝编译那一行赋值动作.你不会自动co ...

  3. Effective C++ -- 构造析构赋值运算

    05.了解C++默默编写并调用哪些函数 编译产生的析构函数时non-virtual,除非这个类的基类析构函数为virtual 成员变量中有引用和const成员时,无法自己主动生成copy assign ...

  4. Effective C++ 之《构造/析构/赋值运算》

    条款05:了解C++默默编写并调用了哪些函数 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 条款07:为多态基类声明virtual析构函数 1. 带多态性质的父类,应该声明一个virtual ...

  5. Effective C++学习笔记——构造/析构/拷贝运算

    条款9:决不再构造和析构过程中调用virtual函数,包括通过函数间接调用virtual函数. 应用:想在一个继承体系中,一个derived class被创建时,某个调用(例如生成相应的日志log)会 ...

  6. 声明及赋值_重述《Effective C++》二——构造、析构、赋值运算

    关于本专栏,请看为什么写这个专栏.如果你想阅读带有条款目录的文章,欢迎访问我的主页. 构造和析构一方面是对象的诞生和终结:另一方面,它们也意味着资源的开辟和归还.这些操作犯错误会导致深远的后果--你需 ...

  7. 《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学

    <深度探索C++对象模型>读书笔记第五章:构造析构拷贝语意学 对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constr ...

  8. 【从零学习OpenCV 4】Mat类构造与赋值

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  9. C++学习笔记-----在重载的赋值运算函数中调用拷贝构造函数

    类的拷贝构造函数与赋值运算不同,拷贝构造函数是对这个类进行初始化的过程,而赋值是删除原有的东西,赋予它新的东西. 但是二者在实现上是互通的. template<class T> graph ...

最新文章

  1. 常玩手机会导致手指残疾? 专家称没依据
  2. 开发日记-20190823 linux有名管道fifo,进程间通信
  3. C#中图片.BYTE[]和base64string的转换
  4. cnn卷积神经网络_卷积神经网络(CNN)原理及应用
  5. 【Android 界面效果22】Android的Tab与TabHost
  6. 用MDT 2012为企业部署windows 7(十一)--抓取标准模板机镜像
  7. Codeforces 1004F Sonya and Bitwise OR (线段树)
  8. Linux 跟踪进程对CPU的占用情况,对内存的占用情况
  9. 常见网盘和云存储测评和使用方式
  10. 【LeetCode】【字符串】题号:*389. 找不同
  11. 【C语言】abs()用法及其他绝对值函数
  12. C语言 自定义数据类型(结构体 typedef 共用体 位段 枚举)
  13. 自己总结的数据库系统概论笔记,需要的拿去用
  14. 程序员微信名昵称_2020最火的微信名有哪些 好听的微信名字推荐
  15. Selenium(一)12.Actions的常用方法
  16. 如何将ppt演示文稿上传到微信公众号?
  17. 在线思维导图Processon部分截图
  18. python时间间隔标准化输出_利用Python将时间或时间间隔转为ISO 8601格式方法示例...
  19. bootstrap-datepicker只选择年份
  20. 水晶苍蝇拍(14):战胜人性,值得珍藏的投资感悟!

热门文章

  1. day17——其他内置函数
  2. Kafka设计解析(六)- Kafka高性能关键技术解析
  3. java代码实现python2中aes加密经历
  4. 通过分析 JDK 源代码研究 Hash 存储机制--转载
  5. JMX 与系统管理--转
  6. Redis数据持久化机制AOF原理分析一---转
  7. 【风险管理】风控一二三
  8. c语言中的static变量和static函数
  9. 张小龙的小程序革命,复盘731天,用“小”来改变这个世界
  10. 华为,15万大军孤独行走在世界上