0

これは私の母国語からの翻訳です。
クラスがあります:

class Boo : public SuperBoo {
  Foo* fFoo1;
  Foo* fFoo2;
}

Foo - モノモーフィック クラスで、Boo はポインター fFoo1、fFoo2 を所有します。
Boo の割り当て演算子をオーバーロードします。

私の解決策は次のとおりです。

class Foo
{
public:
    Foo()
    {}
};

class SuperBoo
{
public:
    virtual ~SuperBoo()
    {}
};

class Boo : public SuperBoo
{
public:
    Boo(const int f1_id, const int f2_id)
    {
        f1 = new Foo(f1_id);
        f2 = new Foo(f2_id);
    }
    ~Boo()
    {
        delete f1;
        delete f2;
    }
    /* C++11 only
    Boo(Boo&& other)
    {
        std::swap(*this, other);
    }
    */
    Boo(const Boo& other)
    {
        f1 = new Foo(*(other.f1));
        f2 = new Foo(*(other.f2));
    }
    Boo& operator=(Boo other)
    {
        std::swap(f1, other.f1);
        std::swap(f2, other.f2);
        return *this;
    }
private:
    Foo* f1;
    Foo* f2;
};

しかし、雇用主はそれを好まなかった。ここで何が問題なのですか?手伝ってくれてありがとう。

4

1 に答える 1

1

コンストラクターは次のように書き換えることができます。

Boo(const int f1_id, const int f2_id)
{
    std::unique_ptr<Foo> pf1 = new Foo(f1_id);
    f2 = new Foo(f2_id);

    f1 = pf1.release();
}

このようにして、f2 コンストラクターがスローした場合、f1 はリークされません。

ちなみに、コピーコンストラクターは同じルールに従う必要があります。

于 2013-03-15T11:24:01.907 に答える