对于类来说,每个类都有拷贝构造和拷贝赋值函数,即使没有自定义类的这两个函数,编译器会自动为类定义这两个函数。为什么必须为类必须定义这两个函数呢?因为自定义的类都会进行两个操作:
- 类对象的初始化(用一个类对象直接初始化另一个类对象)
- 类对象的赋值操作(用一个类对象直接赋值为另一个类对象)
拷贝构造函数
class Widget {
public:
Widget() {}
Widget(const Widget& widget) {}
};
拷贝构造函数和普通的构造函数的性质是一样的。可以把它理解为带参的构造函数,要求第一个参数类型必须是该类且只有一个,但是可以有其他的默认参数。
只要对象使用该类型对象初始化,就会调用拷贝构造函数。