C++(深拷贝、潜拷贝)
在C++中,深拷贝(deep copy)和浅拷贝(shallow copy)是涉及对象复制的两个概念,特别是当涉及到类或结构体时。下面我将解释这两个概念:
1. 浅拷贝(Shallow Copy):
浅拷贝是指将一个对象的内容复制到另一个对象,但如果对象中包含指针,则只会复制指针的值,而不是指针所指向的数据。这意味着两个对象会共享相同的数据,当其中一个对象的数据发生改变时,另一个对象的数据也会相应改变。
#include <iostream>
class ShallowCopyExample {
public:
int* data;
// Constructor
ShallowCopyExample(int value) {
data = new int(value);
}
// Shallow copy constructor
ShallowCopyExample(const ShallowCopyExample& other) {
data = other.data; // 只复制指针的值
}
// Destructor
~ShallowCopyExample() {
delete data;
}
};
int main() {
ShallowCopyExample obj1(42);
ShallowCopyExample obj2 = obj1; // 浅拷贝
std::cout << *obj1.data << std::endl; // 输出: 42
std::cout << *obj2.data << std::endl; // 输出: 42
// 修改其中一个对象的数据
*obj1.data = 99;
// 由于浅拷贝,另一个对象的数据也会被修改
std::cout << *obj1.data << std::endl; // 输出: 99
std::cout << *obj2.data << std::endl; // 输出: 99
return 0;
}
2. 深拷贝(Deep Copy):
深拷贝是指将一个对象的内容复制到另一个对象,并且复制指针所指向的实际数据,而不仅仅是复制指针的值。这样,两个对象有各自独立的数据,修改其中一个对象的数据不会影响另一个对象。
#include <iostream>
class DeepCopyExample {
public:
int* data;
// Constructor
DeepCopyExample(int value) {
data = new int(value);
}
// Deep copy constructor
DeepCopyExample(const DeepCopyExample& other) {
data = new int(*other.data); // 深拷贝:复制指针所指向的数据
}
// Destructor
~DeepCopyExample() {
delete data;
}
};
int main() {
DeepCopyExample obj1(42);
DeepCopyExample obj2 = obj1; // 深拷贝
std::cout << *obj1.data << std::endl; // 输出: 42
std::cout << *obj2.data << std::endl; // 输出: 42
// 修改其中一个对象的数据
*obj1.data = 99;
// 由于深拷贝,另一个对象的数据不受影响
std::cout << *obj1.data << std::endl; // 输出: 99
std::cout << *obj2.data << std::endl; // 输出: 42
return 0;
}
在实际编程中,确保使用适当的拷贝方式以防止意外的数据共享和修改。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)