1

我有一堂课:

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;
}

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

4

1 回答 1

3

有两种可能:

  • 复制构造函数 + 赋值运算符
  • clone方法

代码:

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;
};

在继续之前回答这些:

  • 你真的需要int指针吗?
  • 你知道智能指针吗?
  • 你释放你分配的所有内存吗?
  • 你初始化构造函数中的所有成员吗?
于 2012-07-19T13:50:51.667 回答