如何进行深拷贝?

How to make a deep copy?

所以基本上假设我现在有 2 classes。 1个叫Human,一个叫House

我现在所做的是房子创造和毁灭人类,所以基本上在房子.h 文件中我有

    Human *humanP;

并在 .cpp 文件构造函数中

    humanP = new Human;
    humanP->something(); // lets me access the methods in the Human class

据我所知,这使得组合和房屋 creates/destroys 成为人类对象。但是我需要向我的 Human 对象添加参数,例如身高和年龄。

主要是我想要

int age, height;

cout << "Whats your age? << endl;
cin >> age;
cout << "Whats your height? << endl;
cin >> height;

我想用这个

Human humanO(age, height);

这将使用这些参数创建 Human 对象。但我仍然希望将 Human 对象保存在 House class 中,然后在那里销毁。据我所知,我需要对其进行深度复制,以便我可以复制 House class 中的 humanO,然后删除主文件中的对象。

我一直在寻找例子,但有很多不同的例子,任何人都可以编写代码来对在 main 中创建的这个 Human 对象进行深度复制吗?

编辑:

在这里进行编辑而不是回复,因为在这里编写代码更容易。

好的,又是一个愚蠢的问题。如果我使用带有

的简单方法
Human *newPerson = new Human

并做

House house;
house.addHuman(newPerson)

同时拥有 class 方法

addHuman(Human *other)
{
   this->humanP = other;
   cout << humanP->getAge() << endl << endl << endl;
}

它工作正常并告诉我年龄。

如果我使用智能指针它不起作用,我应该更改什么?它给了我像 "no matching function" 这样的错误。我应该在 addHuman() 中放入什么参数,以便它可以使用智能指针?

深拷贝仅仅意味着你已经为第二个拷贝分配了 space 并将原始内容复制到那个 space,而不是浅拷贝,这实际上是一个 'pointer'到原始对象被销毁后失效。

如果您必须拥有多个数据所有者,则只需要深拷贝。如果您的 House 对象打算拥有数据,创建一个 Human' dynamically and then passing it to theHouse` 实例就可以了。

Human *newPerson = new Human(age,height);

house->AddHuman(newPerson);

或者,如果您想利用智能指针:

std::unique_ptr<Person> newPerson = std::make_unique<Person>(age,height);

std::unique_ptr<Person> newPerson(new Person(age,height));

然后

house->AddHuman(std::move(newPerson));

如果您的项目绝对需要执行深拷贝,那么您可能不想在本地分配。

house->AddHuman(Person(age,height));

其中 House 有一个新方法,AddHuman() 看起来像这样:

void House:AddHuman(Person& newHuman);

如果HouseHuman个对象存储在向量中,Human个对象可以简单地复制:

m_Humans.PushBack(newHuman);