拷贝构造函数的深拷贝和浅拷贝分别怎么用,
时间: 2024-04-30 15:18:42 浏览: 91
拷贝构造函数是一种特殊的构造函数,用于将一个对象作为参数传递给函数或者在创建一个新对象时,以已有对象初始化新对象。拷贝构造函数可以按照需要进行浅拷贝和深拷贝。
浅拷贝:将对象的成员变量逐个复制到新对象中,如果成员变量是指针类型,则只复制指针的值,而不是指针所指向的内容。这意味着,新对象和原对象共享同一块内存空间,如果其中一个对象改变了这个内存空间中的值,另一个对象也会受到影响。
深拷贝:将对象的成员变量逐个复制到新对象中,如果成员变量是指针类型,则不仅复制指针的值,还要复制指针所指向的内容。这样,新对象和原对象拥有各自独立的内存空间,互不影响。
下面是浅拷贝和深拷贝的示例代码:
```c++
#include <iostream>
#include <cstring>
class Person {
public:
char* name;
int age;
// 拷贝构造函数
Person(const Person& other) {
// 浅拷贝
// name = other.name;
// 深拷贝
name = new char[strlen(other.name) + 1];
strcpy(name, other.name);
age = other.age;
}
// 构造函数
Person(char* name, int age) {
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
this->age = age;
}
// 析构函数
~Person() {
delete[] name;
}
void print() {
std::cout << "Name: " << name << ", Age: " << age << std::endl;
}
};
int main() {
// 创建一个Person对象
Person p1("Tom", 20);
// 使用拷贝构造函数创建一个新的Person对象
Person p2 = p1;
// 修改p1的name,p2也会受到影响
p1.name[0] = 'J';
// 打印p1和p2
p1.print();
p2.print();
return 0;
}
```
在上面的示例代码中,当拷贝构造函数使用浅拷贝时,p1和p2共享同一块内存空间,因此当修改p1的name时,p2也会受到影响。但当拷贝构造函数使用深拷贝时,p1和p2拥有各自独立的内存空间,互不影响。
阅读全文