在以下情况下会调用拷贝构造函数:
- 当使用一个对象来初始化另一个对象时,例如:
MyClass obj1;
MyClass obj2 = obj1; // 调用拷贝构造函数
- 当将一个对象作为函数参数传递给函数时,例如:
void func(MyClass obj);
MyClass obj1;
func(obj1); // 调用拷贝构造函数
当将一个对象作为函数参数传递给函数时,拷贝构造函数会自动被调用,用于创建一个新的对象副本,这个副本将被传递给函数。如果对象是一个类对象,那么该类必须定义拷贝构造函数,否则编译器会自动生成一个默认的拷贝构造函数。
- 当从函数返回一个对象时,例如:
MyClass func();
MyClass obj1 = func(); // 调用拷贝构造函数
当从函数返回一个对象时,会触发拷贝构造函数的调用。具体来说,当一个对象被返回时,编译器会创建一个临时的对象,然后将返回值拷贝到这个临时对象中。这个拷贝的过程就是通过拷贝构造函数来完成的。
- 当创建一个对象数组时,例如:
MyClass arr[3]; // 调用拷贝构造函数三次
- 当使用一个对象初始化一个对象指针时,例如:
MyClass obj1;
MyClass* ptr = new MyClass(obj1); // 调用拷贝构造函数