0

次のコードでは:

class MyClass
{
public:
    vector<int> v;
};

MyClass f()
{
    MyClass x;

    x.v.resize(10);

    for (int i = 0; i < 10; i++)
    {
        x.v[i] = i;
    }
    return x;
}

void g()
{
    MyClass x;
    x = f();  // Copy assignment is called for vector<int>
}

Visual C++ 2012 でコンパイルされた行x = f()で、移動代入がベクトルに対して呼び出されると想定しました。代わりに、コピー割り当てが呼び出されていることがわかります。クラスにはコピー/移動代入/コンストラクターが定義されていないため、コンパイラーがデフォルトの移動代入を生成することを期待していました。MyClass移動割り当ての代わりにプレーンベクターを使用すると、正常に機能します。このコードに何か問題がありますか? 何か不足していますか?

4

2 に答える 2