1

私は独自のベクトル クラス (x、y 値のコンテナー) を作成していますが、どのコンストラクター/代入演算子を自分で実装する必要があるのか​​ 、コンパイラーが提供するものを期待できるのかよくわかりません。明らかに、デフォルトの動作を持たないメソッドや自動生成されないメソッドを作成する必要があります。しかし、確かに、コンパイラがまったく同じものを生成できる場合、何かを実装しても意味がありません。

私はVisual Studio 2010を使用しています(これはC++ 11の側面で問題になる可能性があります)。また、それが重要な場合、私のクラスはテンプレートです。

現在、私は持っています:

template <typename T>
class Integral2
{
    // ...

    Integral2(void)
        : x(0), y(0)
    {}

    Integral2(Integral2 && other)
        : x(std::move(other.x)), y(std::move(other.y))
    {}

    Integral2(T _x, T _y)
        : x(_x), y(_y)
    {}

    Integral2 & operator =(Integral2 const & other)
    {
        x = other.x;
        y = other.y;
        return *this;
    }

    Integral2 & operator =(Integral2 && other)
    {
        x = std::move(other.x);
        y = std::move(other.y);
        return *this;
    }

    // ...
};

move ctor/move operator がある場合、copy ctor/assignment operator は必要ですか?

4

1 に答える 1

1

C++ には、必要であると確信しているコンストラクター/オペレーターを定義するためのガイドラインを提供する3 つのルールがあります。C++11 では、ムーブ セマンティクスが 3 のルールをプッシュして5 のルールになると信じている人もいます。実装例については、このスレッドを参照してください。これらのガイドラインを検討することをお勧めします。

于 2013-03-31T00:54:42.000 に答える