复制控制
定义一个新类型的时候,需要显式或隐式地指定复制
、赋值
和撤销
该类型的对象时会发生什么,这是通过定义特殊成员:复制构造函数
、赋值操作符
和 析构函数
来达到的。如果没有显式定义复制构造函数或赋值操作符,编译器(通常)会为我们定义。
复制构造函数、赋值操作符和析构函数总称为复制控制。
编译器自动实现这些操作,但类也可以定义自己的版本。
编译器合成的复制控制函数是非常精练的,它们只做必需的工作。但对某些类而言,依赖于默认定义会导致灾难。实现复制控制操作最困难的部分,往往在于识别何时需要覆盖默认版本。有一种特别常见的情况需要类定义自己的复制控制成员的:类具有指针成员。
复制构造函数
复制构造函数是一种特殊构造函数
,具有单个形参
,该形参(常用const修饰)是对该类类型的引用
。与默认构造函数一样 ,复制构造函数可由编译器隐式调用。
使用复制构造函数
- 根据另一个同类型的对象显式或隐式初始化一个对象。
- 复制一个对象将它作为实参传给一个函数。