我读了这篇文章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() 依靠该不变量,但新引入的移动构造函数从 v 移动,从而将其长度设置为零。
我不明白为什么,因为我们试图移动 X,v
长度会为零