拷贝构造函数(深拷贝和浅拷贝)
时间: 2024-02-23 11:53:31 浏览: 70
C++类对象的深拷贝、浅拷贝构造函数.doc
3星 · 编辑精心推荐
拷贝构造函数是一种特殊的构造函数,它在创建对象时使用另一个同类的对象来初始化新创建的对象。拷贝构造函数通常用于以下情况:
- 通过值传递参数给函数
- 从函数返回对象
- 在程序中创建对象的副本
深拷贝和浅拷贝是拷贝构造函数的两种类型。浅拷贝只是复制指针,而不是复制指针所指向的内容,因此两个指针将指向同一个内存地址。这意味着,如果一个对象被修改,另一个对象也会受到影响。深拷贝则是复制指针所指向的内容,而不是复制指针本身。这意味着,即使一个对象被修改,另一个对象也不会受到影响。
下面是一个C++的例子,演示了深拷贝和浅拷贝的区别:
```cpp
#include <iostream>
using namespace std;
class Person {
public:
Person() {
name = new char[10];
age = 0;
}
Person(const Person& p) {
name = new char[10]; strcpy(name, p.name);
age = p.age;
}
~Person() {
delete[] name;
}
void setName(char* n) {
strcpy(name, n);
}
void setAge(int a) {
age = a;
}
void print() {
cout << "Name: " << name << ", Age: " << age << endl;
}
private:
char* name;
int age;
};
int main() {
Person p1;
p1.setName("Tom");
p1.setAge(20);
Person p2(p1); // 浅拷贝
p2.setName("Jerry");
p2.setAge(30);
p1.print(); // 输出:Name: Jerry, Age: 20
p2.print(); // 输出:Name: Jerry, Age: 30
Person p3;
p3.setName("Alice");
p3.setAge(25);
Person p4 = p3; // 深拷贝
p4.setName("Bob");
p4.setAge(35);
p3.print(); // 输出:Name: Alice, Age: 25
p4.print(); // 输出:Name: Bob, Age: 35
return 0;
}
```
阅读全文