次のコードでは:
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
移動割り当ての代わりにプレーンベクターを使用すると、正常に機能します。このコードに何か問題がありますか? 何か不足していますか?