Effective C++读书笔记(二)

条款5: 了解C++默默编写并调用了哪些函数

  • 对于一个空类,C++会自动为其添加一个copy构造函数,一个copy assignment操作符,一个析构函数和一个defualt构造函数

条款6: 若不想使用编译器自动生成的函数,就该明确拒绝

  • 有些时候不希望外部可以使用拷贝构造函数(或其它自动提供的函数),可以考虑将其定义为private并且不予实现

条款7: 为多态基类声明virtual析构函数

  • 如果多态类有任何virtual函数,他就应该拥有一个virtual析构函数,这样对象在最后的回收时才能调用正确的析构函数
  • 为抽象类构造一个纯虚析构函数
  • 如果类的设计目的不是为了具备多态性,就不该声明析构函数

条款8: 别让异常逃离析构函数

  • 析构函数吐出异常是不确定的行为,两个办法
    • 捕捉任何异常并吞下(不传播)
    • 结束程序
  • 如果析构函数一定需要做出反应,class应该在普通函数中处理(设计问题)

条款9: 绝不在构造和析构过程中调用virtual函数

  • 此过程中的调用姜不会下降至derived class

条款10: 另 operator= 返回一个对 *this 的引用

  • 可以实现连续赋值

条款11: 在 operator= 中处理”自我赋值”

  • 确保对象在自我赋值时有良好行为
    • 可以在在函数起始处加入证同测试
    • 或者是operator具备异常安全性

条款12: 复制对象时勿忘记其每一个成分

  • copying函数应该确保复制
    • 对象内所有成员变量
    • 所有base成分
  • 不应该在某个copy函数中调用另一个copy函数