c++里深拷贝和浅拷贝是怎么回事,能举个具体的例子吗
时间: 2024-09-10 11:20:50 浏览: 97
在 C++ 中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是指对复杂数据结构进行复制的行为,特别是当这些结构包含指针、引用或其他复杂类型的成员时。
**浅拷贝**:当一个对象拥有其他对象的引用或者指针作为其成员时,浅拷贝只复制了这些引用或指针本身,而不复制它们指向的内容。这意味着,对于原对象和新对象,如果修改通过浅拷贝传递的对象,原对象也会受到影响。例如:
```cpp
class A {
public:
int* data;
};
A a; // 创建一个原始对象,data指向内存地址0x1
a.data = new int(42); // data现在指向0x2
A b(a); // 浅拷贝,b的数据成员data也指向0x2
// 修改b的数据
*b.data = 99; // 原始对象a的数据也会变
```
**深拷贝**:深拷贝则是完全独立的复制整个对象,包括所有嵌套的对象。它会创建新的内存空间并复制所有内容,所以修改新对象不会影响原对象。在 C++ 中,可以使用 `clone()` 函数(C++11及以后版本中已废弃,通常用 copy constructor 或者赋值运算符实现深拷贝),或者是 `std::deep_copy` 来实现深拷贝。但对于简单类型,如基本数据类型,复制实际上是深拷贝,因为不需要额外的操作。
```cpp
class A {
public:
int* data;
};
A a; // 和上面一样
A deepCopyOfA(a); // 这是一个深拷贝,data现在指向0x3,修改deepCopyOfA不影响a
```
阅读全文