C++11 Effective modern c++ 条款17 理解特殊成员函数的生成           

理解特殊成员函数的生成

Things to Remember

在C++98,特殊成员函数有四个

用到的时候才生成。

它们是 隐式public和inline的。

某个类继承了 destructor 是virutal 的基类,那么这个类的 destructor 是虚函数。

C++11 中,又添加两个新的,编译器可以自动生成的函数 move constructor 和 move assignment operator

class Widget {
  public:
      ...
      Widget(Widget&& rhs);   // move constructor
                         `
      Widget& operator=(Widget&& rhs);   // move assign operator
      ..
  };        * move constructor 对 rhs 的 non-static member 逐一请求移动。 * move assignment operator 也将 rhs 的 non-static member 逐一请求移动。

   * 如果你声明了 copy constructor, copy assignment operator, destructor 中的一个,那么你应该将三个都声明。原因,copy constructor 和 copy assignment operator 应该有一样的 resrouces 管理, destructor 也需要参与 resources 管理 (释放资源)。stl 中涉及内存的类 (stl container) 都声明了 copy constructor, copy assignment operator, destructor.