深拷贝和浅拷贝语法C++
时间: 2024-11-20 20:26:11 浏览: 7
C++拷贝构造函数的介绍及使用
在C++中,深拷贝和浅拷贝是两种数据复制的方式,主要用于处理复杂的数据结构,如指针、数组、动态分配的对象等。
**浅拷贝(Copy Elision or Shallow Copy)**:
- 当对基本类型变量或者值传递的对象进行赋值操作时,实际上是一种浅拷贝。例如:
```cpp
int a = 5; // 基本类型,浅拷贝
int b = a; // 这里实际上是a的引用赋给b,不是复制
struct NoDeepCopy {
int* ptr;
};
NoDeepCopy c, d; // 对于有指针类型的结构体,复制的是指针本身,不是内容
d = c; // 这是浅拷贝,c和d共享同一个内存地址
```
- 如果直接复制一个类对象,如果没有显式声明深拷贝构造函数,那么也会默认进行浅拷贝。
**深拷贝(Deep Copy)**:
- 对于自定义类型,如果需要完整复制其内部状态,包括所有成员变量及其内容,就需要显式地实现深拷贝构造函数和赋值运算符。
```cpp
class DeepCopyExample {
public:
DeepCopyExample(int value) : val(value) {} // 显式声明深拷贝构造函数
private:
int val;
DeepCopyExample(const DeepCopyExample& other) { // 深拷贝构造函数
val = other.val;
}
DeepCopyExample& operator=(const DeepCopyExample& other) { // 深度赋值运算符
if (this != &other) {
val = other.val;
}
return *this;
}
};
// 使用时:
DeepCopyExample e(10);
DeepCopyExample f(e); // 这是一个深拷贝,创建了一个新的对象f并复制了e的内容
```
阅读全文