私はこの記事cppnextの暗黙の移動を読みましたが、この問題を理解していませんでした:
#include <iostream>
#include <vector>
struct X
{
// invariant: v.size() == 5
X() : v(5) {}
~X()
{
std::cout << v[0] << std::endl;
}
private:
std::vector<int> v;
};
int main()
{
std::vector<X> y;
y.push_back(X()); // X() rvalue: copied in C++03, moved in C++0x
}
MSVC2010では、実行時にバグはありません...誰か助けてもらえますか?
この記事には次の文があります:
ここでの重要な問題は、C ++ 03では、Xにはそのvメンバーが常に5つの要素を持つという不変条件があったことです。X ::〜X()はその不変条件を頼りにしましたが、新しく導入されたmoveコンストラクターはvから移動したため、その長さはゼロに設定されました。
v
Xを動かそうとしているので、長さがゼロになる理由がわかりません