• 默认构造函数:就是不接受任何参数的构造函数。比如,下列代码中的A()就是默认构造函数
  • 拷贝构造函数:如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数,如下面的A(const A&)
  • 拷贝赋值运算符:拷贝赋值运算符在对类进行赋值的时候调用,其本质是一个名为operator=函数
  • 析构函数:析构函数是在一个对象被销毁时调用的函数
    class A
    {
      A();//默认构造函数
      //拷贝控制成员:
      A(const A&);//拷贝构造函数
      A& operator=(const A&);//拷贝赋值运算符
      ~A();//析构函数
    };
    

    拷贝构造函数、拷贝赋值运算符、析构函数属于可以控制类的拷贝操作,称为拷贝控制成员 默认构造函数和拷贝控制成员都可以由编译器自动合成

    class B
    {
      B() = default;
      B(const B&) = default;
      B& operator=(const B&) = default;
      ~B() = default;
    }
    

    在类B中,拷贝控制成员和默认构造函数都可以被加上=default,这是C++11引入的新特性,通过使用这个标识显示地要求编译器生成合成的版本(而无需用户定义) 注意:

  • 我们只能对具有合成版本的成员函数使用=default(即默认构造函数或拷贝控制成员)