什么是复制构造函数、复制构造函数在何时调用?
时间: 2023-12-18 22:02:25 浏览: 84
复制构造函数(Copy Constructor)是一种特殊的构造函数,用于在创建新对象时,以已有对象的值来初始化新对象。简单来说,它用于实现对象的复制。在C++中,复制构造函数的函数名必须与类名相同,而且没有返回值。
复制构造函数在以下情况下会被自动调用:
1. 使用一个类对象去初始化同类的另一个对象时,会调用复制构造函数。如:
```c++
MyClass obj1;
MyClass obj2 = obj1; //使用obj1初始化obj2,会调用复制构造函数
MyClass obj3(obj1); //使用obj1初始化obj3,会调用复制构造函数
```
2. 将类对象作为函数参数传递的时候,会调用复制构造函数。如:
```c++
void func(MyClass obj); //函数参数为MyClass类型,会调用复制构造函数
MyClass obj1;
func(obj1); //调用func函数,会调用复制构造函数
```
3. 当函数返回一个类对象时,会调用复制构造函数。如:
```c++
MyClass func() {
MyClass obj;
return obj; //返回一个MyClass对象,会调用复制构造函数
}
MyClass obj1 = func(); //调用func函数,会调用复制构造函数
```
需要注意的是,在以上情况中,如果没有定义复制构造函数,编译器会自动生成一个默认的复制构造函数,但是它只会简单地将原对象的成员变量值复制到新对象中,无法正确地处理动态分配内存等情况,容易导致内存泄漏等问题。因此,在类中存在动态分配内存等情况时,必须手动实现复制构造函数,以确保对象复制的正确性和安全性。
阅读全文