C++ C++;(逻辑复制构造函数)如何复制对象?

C++ C++;(逻辑复制构造函数)如何复制对象?,c++,pointers,object,copy-constructor,C++,Pointers,Object,Copy Constructor,我有一门课: class Person{ public: Person(); ~Person(); string name; int* age; }; int main() { Person* personOne = new Person; personOne->name = "Foo"; personOne->age = new int(10); return 0; } 如何创建Person的另一个对象来复制所

我有一门课:

class Person{
public:
    Person();
    ~Person();
    string name;
    int* age;
};

int main()
{
    Person* personOne = new Person;
    personOne->name = "Foo";
    personOne->age = new int(10);


    return 0;
}

如何创建Person的另一个对象来复制所有personOne数据?年龄指针需要指向一个新的int,这样每当personOne或personTwo中的年龄发生变化时,它都不会相互影响。

有两种可能性:

  • 复制构造函数+赋值运算符
  • 克隆
    方法
代码:

在继续之前回答以下问题:

  • 您真的需要
    int
    指针吗
  • 你知道智能指针吗
  • 是否释放分配的所有内存
  • 是否初始化构造函数中的所有成员

谢谢您的示例。我可以问一下是复制构造函数+赋值运算符还是克隆方法吗?您忘记了在赋值运算符中清理分配给此->年龄的内存。我真的不需要int指针,但我展示的代码只是我将来想做的一个很小的示例。什么是智能指针?是的,我忘了删除指针了。难道你不能把
年龄
初始化(更像是作业)移到
名称
旁边吗?@chris this/\你的意思是什么?我希望这是一个纯粹的学术问题,你永远不会写那样的真实代码。别担心,你看起来还不是我的“真实”程序;)不是这样的。这只是我做的一个代码示例。如果这是我真正的代码,我会有一个合适的构造函数,正确地分配变量,删除指针等等(甚至不会为年龄lol使用指针)不:如果你有一个真正的程序,它不应该有指针或
new
!:-)@KrRekSB是非常正确的,但是这种优化是超出我的:坑不是优化——它只是C++。您所拥有的看起来更像Java。。。
class Person{
public:
    Person();
    ~Person();
    Person (const Person& other) : name(other.name), age(new int(*(other.age)))
    {
    }
    Person& operator = (const Person& other)
    {
        name = other.name;
        delete age; //in case it was already allocated
        age = new int(*(other.age))
        return *this;
    }
    //alternatively 
    Person clone()
    {
        Person p;
        p.name = name;
        p.age = new int(age);
        return p;
    }

    string name;
    int* age;
};