cpp中浅拷贝和深拷贝有什么区别
时间: 2023-11-30 21:04:32 浏览: 74
浅拷贝和深拷贝是C++中常用的两种拷贝方式,它们的区别在于拷贝的对象是否共享内存空间。
1. 浅拷贝
浅拷贝就是将一个对象的值复制到另一个对象中,两个对象共享同一块内存空间。当一个对象发生改变时,另一个对象也会受到影响。
示例:
```c++
class A {
public:
int* data;
A(int n) {
data = new int[n];
for (int i = 0; i < n; i++) {
data[i] = i;
}
}
A(const A& a) {
data = a.data;
}
};
int main() {
A a(5);
A b = a;
b.data[0] = 100;
cout << a.data[0] << endl;
cout << b.data[0] << endl;
}
```
输出结果:
```
100
100
```
2. 深拷贝
深拷贝是将一个对象的值复制到另一个对象中,但是两个对象的内存空间独立。当一个对象发生改变时,另一个对象不会受到影响。
示例:
```c++
class A {
public:
int* data;
A(int n) {
data = new int[n];
for (int i = 0; i < n; i++) {
data[i] = i;
}
}
A(const A& a) {
data = new int[5];
for (int i = 0; i < 5; i++) {
data[i] = a.data[i];
}
}
};
int main() {
A a(5);
A b = a;
b.data[0] = 100;
cout << a.data[0] << endl;
cout << b.data[0] << endl;
}
```
输出结果:
```
0
100
```
总结:
浅拷贝是将两个对象共享同一块内存空间,当一个对象发生改变时,另一个对象也会受到影响;深拷贝是将两个对象的内存空间独立,当一个对象发生改变时,另一个对象不会受到影响。在使用拷贝构造函数时,需要根据实际情况选择浅拷贝或深拷贝。
阅读全文