c++中的深拷贝和浅拷贝
时间: 2024-11-28 17:18:11 浏览: 4
c++种的浅拷贝与深拷贝
在 C++ 中,拷贝是一种数据传递的方式,用于创建新对象并初始化为现有对象的状态。深拷贝和浅拷贝主要涉及到复杂的数据结构,尤其是指针或引用类型的对象。
1. **浅拷贝** (Shallow Copy):当对包含指向动态分配内存的对象的简单值类型变量进行复制时,通常就是浅拷贝。它只是复制了对象的引用,并不会复制实际内容。例如,对于基本类型、栈上的数据以及没有成员指针的对象,浅拷贝就足够了。浅拷贝的对象之间修改会影响到彼此。
```cpp
int a = 5;
int b = a; // 浅拷贝,b和a共享相同的整数值
class Point {
public:
int x, y;
};
Point p1(10, 20);
Point p2 = p1; // 对于类 Point,这里也是浅拷贝,p2引用了p1的地址
```
2. **深拷贝** (Deep Copy):如果对象包含指针或引用,或者更复杂的结构(如自定义容器或有嵌套的对象),那么复制的是整个对象的内容,包括所有底层的动态分配的内存。这需要显式地实现拷贝构造函数和赋值运算符,或者使用 `std::copy` 等库函数。深拷贝会创建一份独立的副本,修改一个副本不会影响到原始对象。
```cpp
// 深拷贝示例
Point p3(p1); // 对于类 Point,这是深拷贝,创建了一个新的 Point 实例并复制了其数据
std::vector<int> vec1 = {1, 2, 3};
std::vector<int> vec2 = vec1; // 对于 std::vector,这也是深拷贝,每个元素都单独复制了一次
```
阅读全文