c++ 拷贝构造函数
时间: 2023-07-05 14:20:05 浏览: 148
详解C++ 拷贝构造函数
5星 · 资源好评率100%
C++中的拷贝构造函数是一种特殊的构造函数,它用于创建一个新的对象,该对象是已有对象的副本。拷贝构造函数的声明如下:
```cpp
class MyClass {
public:
MyClass(); // 默认构造函数
MyClass(const MyClass& other); // 拷贝构造函数
};
```
拷贝构造函数的参数是一个常量引用,它指向要被拷贝的对象。拷贝构造函数的实现通常包括以下步骤:
1. 分配内存空间,用于存储新对象。
2. 将原对象的数据成员复制到新对象中。
3. 如果原对象有指向动态分配内存的指针,则需要为新对象分配一块新的内存,并将原对象指针所指向的内存复制到新内存中。
以下是一个示例:
```cpp
#include <iostream>
using namespace std;
class MyClass {
public:
int* data;
int size;
// 默认构造函数
MyClass() {
data = nullptr;
size = 0;
}
// 拷贝构造函数
MyClass(const MyClass& other) {
size = other.size;
if (size > 0) {
data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = other.data[i];
}
} else {
data = nullptr;
}
}
// 析构函数
~MyClass() {
delete[] data;
}
};
int main() {
MyClass a;
a.size = 3;
a.data = new int[a.size];
a.data[0] = 1;
a.data[1] = 2;
a.data[2] = 3;
// 使用拷贝构造函数创建一个新对象 b
MyClass b(a);
cout << "a.data: ";
for (int i = 0; i < a.size; i++) {
cout << a.data[i] << " ";
}
cout << endl;
cout << "b.data: ";
for (int i = 0; i < b.size; i++) {
cout << b.data[i] << " ";
}
cout << endl;
return 0;
}
```
在上面的示例中,我们定义了一个包含指针成员的类 MyClass,并实现了默认构造函数、拷贝构造函数和析构函数。在主函数中,我们先创建一个 MyClass 类型的对象 a,并为其分配一块大小为 3 的动态内存。然后使用拷贝构造函数创建一个新对象 b,最后输出 a 和 b 的数据成员,验证拷贝构造函数的正确性。
阅读全文