你能给一个deepCopy函数的例子吗
时间: 2024-10-08 16:06:30 浏览: 29
python中copy()与deepcopy()的区别小结
当你有一个复杂的对象,它包含嵌套的对象或者动态分配的资源,这时你需要编写深度克隆(deep copy)函数,以确保新的对象拥有与原始对象完全独立的副本。以下是一个简单的 C++ 示例,假设我们有一个名为 `Person` 的类,包含了姓名和一个指向 `Address` 对象的指针:
```cpp
#include <string>
#include <memory>
class Address {
public:
Address(const std::string& street, int number)
: street(street), number(number) {}
std::string street;
int number;
};
class Person {
private:
std::string name;
std::unique_ptr<Address> address;
public:
// 深度拷贝构造函数
Person(const Person& other) : name(other.name), address(other.address ? std::make_unique<Address>(*other.address) : nullptr) {}
// 深度拷贝赋值操作
Person& operator=(const Person& other) {
if (this != &other) {
if (address) {
address->~Address();
}
address = other.address ? std::make_unique<Address>(*other.address) : nullptr;
}
return *this;
}
void deepCopy(Person& target) {
target = *this; // 这里调用的是已有的赋值运算符,实现了深拷贝
}
};
int main() {
Person person("Alice", std::make_unique<Address>("123 Main St", 456));
Person copied_person(person);
person.deepCopy(copied_person); // 这将创建copied_person的一个完整副本
// 修改原person的address不会影响copied_person
person.address->street = "New Street";
return 0;
}
```
在这个例子中,`Person` 类的深拷贝构造函数和赋值操作都负责递归地复制内部的 `Address` 对象。
阅读全文