1.默认构造函数,只要类中自己定义了一个构造函数,编译器也不会再生成默认的构造函数。
默认构造函数使用与变量初始化相同的规则来初始化成员,具有类类型的成员通过各自的默认构造函数进行初始化;内置和复合类型的成员,只对定义在全局作用域中的对象才进行初始化,当对象定义在局部作用域中的时候不进行初始化。
2.复制构造函数,一种特殊的构造函数,具有单个形参,该形参是对类类型的引用,当定义一个新对象并用一个同类型的对象对它进行初始化的时候,将显示使用复制构造函数;当将该类类型的对象传递 给函数或者从函数返回该类类型的对象的时候,将隐士使用复制构造函数。
3.析构函数是构造函数的互补,当对象超出作用域或者动态创建的对象被删除的时候,将自动调用析构函数。析构函数可用于释放对象构造时或在对象的生命周期中所获取的资源,不管类是否定义了自己的析构函数,编译器都会自动执行类中非static数据成员的析构函数。
4.赋值操作符函数,它与构造函数一样,赋值操作符可以通过不同类型的右操作数而重载,右操作数为类类型的版本比较特殊,如果我们没有编写这种版本,编译器会为我们生成一个。
复制构造函数、赋值操作符函数、析构函数总称为复制控制,编译器自动 实现这些操作,但是类也可以生成自己的版本。
有一种特别常见的情况,需要类定义自己的复制控制成员:类具有指针成员。