effective c++

  1. 如果阻止拷贝构造?

    class Uncopyable{
     private: 
         Uncopyable(const Uncopyable&);
         Uncopyable& operator=(const Uncopyable&);
    };

    想要阻止拷贝的子类继承uncopyable类,base class的拷贝构造是private函数会阻止子类进行拷贝构造。

  2. 为多态类申明virtual析构函数

  • 给 base classes 一个 virtual 析构函数",这个规则只适用于 polymorphic (带多 态性质的) base classes 身上
  • Classes 的设计目的如果不是作为 base classes 使用,或不是为了具备多态性(polymorphically) ,就不该声明 virtual析构函数。
  1. 绝不在构造和析构函数中调用virtual函数
  • 在base class构造期间, virtual函数不是 virtual函数。
  • 对象在derived class构造函数开始执行前不会成为一个derived class对象。换句话说,在 base class 构造和析构期间调用的 virtual 函数不可下降至 derived classes。
  1. 令赋值操作符返回一个reference to *this。

  2. operator=中处理自我赋值

    Widget& Widget::operator=(const Widget& rhs){
     //添加证同测试:
    
     delete pb;
     pb = new Bitmap(*rhs.pb);
     return *this;
    }
    

另一种写法:

Widget& Widget::operator=(const Widget& rhs){
    Bitmap* pOrig = pb;
    pb = new Bitmap(*rhs.pb);
    delete pOrig;
    return *this;
}
  1. copying函数应该确保复制“对象内所有成员变量”及“所有base class成分”,不要尝试以某个函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个copying函数共同承担。