c++浅拷贝和深拷贝的区别
时间: 2024-10-06 21:05:12 浏览: 34
C/C++ 浅拷贝和深拷贝的实例详解
5星 · 资源好评率100%
在C++中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是指对复杂数据结构复制的不同方式。
1. **浅拷贝**:
- 当你使用`=`运算符对指针或引用进行赋值时,实际上是创建了一个新的变量并指向相同的内存地址。如果原始对象是一个动态分配的容器(如`std::vector`、`std::string`等),那么浅拷贝只会复制其内容的指针,而不是副本本身。因此,修改浅拷贝的对象会影响到原对象。
- 示例:
```cpp
struct MyClass {
std::vector<int> vec;
};
MyClass a; // 原始对象
MyClass b = a; // 浅拷贝,只复制了vec的指针
```
2. **深拷贝**:
- 深拷贝通常是通过构造函数完成的,它会创建一个新的实例,并为所有成员(包括内部的复杂类型)分配新的内存。这意味着每个元素都会被独立复制,不会共享内存地址。
- 示例:
```cpp
MyClass c(a); // 使用构造函数进行深拷贝,会为vec创建新内存
```
阅读全文