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

2つの可能性があります:

  • コピーコンストラクター+代入演算子
  • 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 に答える