在C++中深度复制动态分配的对象

Ram*_*uer 1 c++ memory allocation dynamic

大家好,我找不到为动态分配的对象构建正确的复制构造函数的方法.它大喊:error: no matching function for call to 'Person::(Person*&')

我的测试代码是这样的:

#include <iostream>
#include <cstring>

class Person
{
private:
    int* age;
    std::string name;
public:
    Person(std::string name_in, int age_in);
    Person(const Person& other);
    ~Person();
    void printAge();
    void printName();
};

Person::Person(std::string name_in, int age_in)
{
    std::cout << "Creating person named " << name_in << std::endl;
    name = name_in;
    age = new int;
    *age = age_in;
}
Person::Person(const Person& other)
{
    std::cout << "Copying person." << std::endl;
    age = new int;
    *age = *other.age;
    name = other.name;
}
Person::~Person()
{
    std::cout << "Freeing memory!" << std::endl;
    delete age;
}

void Person::printAge()
{
    std::cout << "The age is " << *age << std::endl;
}

void Person::printName()
{
    std::cout << "The name is " << name << std::endl;
}


int main()
{
    Person* person1 = new Person("Ramon", 19);
    person1->printAge();
    person1->printName();

    Person* person2 = new Person(person1);
    person2->printAge();
    person2->printName();

    delete person1;
    delete person2;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

似乎当创建person2对象时,它只是指向person1的指针,但它不是!我说它是一个新的动态分配对象:Person* person1 = new Person("Ramon", 19);.知道这可能是什么原因?

谢谢.

bar*_*nos 7

复制构造函数通过引用而不是指针来获取输入参数.

改变这个:

Person* person2 = new Person(person1);
Run Code Online (Sandbox Code Playgroud)

对此:

Person* person2 = new Person(*person1);
Run Code Online (Sandbox Code Playgroud)