在C++中进行深层复制,通常需要对对象进行逐个成员复制。如果对象中包含指针,则需要对指针指向的内存进行复制。以下是一个简单的示例,说明如何在C++中进行深层复制:
#include<iostream>
#include <cstring>
class MyClass {
public:
MyClass(const char* str) {
m_str = new char[strlen(str) + 1];
strcpy(m_str, str);
}
~MyClass() {
delete[] m_str;
}
MyClass(const MyClass& other) {
m_str = new char[strlen(other.m_str) + 1];
strcpy(m_str, other.m_str);
}
MyClass& operator=(const MyClass& other) {
if (this != &other) {
delete[] m_str;
m_str = new char[strlen(other.m_str) + 1];
strcpy(m_str, other.m_str);
}
return *this;
}
friend std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
os<< obj.m_str;
return os;
}
private:
char* m_str;
};
int main() {
MyClass obj1("Hello, world!");
MyClass obj2 = obj1; // 深层复制
std::cout << "obj1: "<< obj1<< std::endl;
std::cout << "obj2: "<< obj2<< std::endl;
return 0;
}
在这个示例中,我们定义了一个包含指针的类MyClass
,并实现了拷贝构造函数和拷贝赋值运算符,以便在进行深层复制时能够正确地复制指针指向的内存。在main
函数中,我们创建了一个MyClass
对象obj1
,并使用拷贝构造函数创建了一个深层复制的对象obj2
。输出结果如下:
obj1: Hello, world!
obj2: Hello, world!
需要注意的是,在进行深层复制时,需要确保正确地分配和释放内存,以避免内存泄漏和其他问题。在实际开发中,可以使用智能指针等工具来简化内存管理。
Elastic 中国开发者大会
云原生正发声
腾讯技术开放日
Techo Day
GAME-TECH
领取专属 10元无门槛券
手把手带您无忧上云