6

クラスがあります。unique_ptr のメンバーを持っています。

class A
{
    std::unique_ptr<int> m;
};

次のステートメントで機能することを願っています

A a;
A b;
a = std::move(b);
std::swap(a, b);

作り方は?

コメントによると、質問があります。このコンパイラは依存していますか? 何もしないと、VC++ 2012 でのコンパイルに合格できません。

以前やってみた

struct A
{
    A() {}

    A(A&& a)
    {
        mb = a.mb;
        ma = std::move(a.ma);
    }

    A& operator = (A&& a)
    {
        mb = a.mb;
        ma = std::move(a.ma);
        return *this;
    }

    unique_ptr<int> ma;
    int mb;
};

しかし、これが最善かつ最も簡単な方法であるかどうかはわかりません。

4

1 に答える 1

2

あなたの最初の例は、C++11 では絶対に正しいです。しかし、VC++ 2012 は現在N3053を実装していません。その結果、コンパイラはムーブ コンストラクターまたは代入演算子を暗黙的に生成しません。そのため、VC++ 2012 を使い続けている場合は、それらを自分で実装する必要があります。

于 2013-09-17T09:20:01.950 に答える