1.Moved-from Objects
在一个对象被std::move()以后,仍然是有效的一个对象,在其生命周期结束的时候会调用其析构函数。
只不过该对象的值变得不确定了。
2.Valid but Unspecified State
C++的标准库保证move以后,仍然是有效的对象,但却不能保证他的value
std::string s;
...
coll.push_back(std::move(s));
foo(std::move(s)); // keeps s in a valid but unclear state
std::cout << s << \n; // OK (don’t know which value is written)
std::cout << s.size() << \n;
// OK (writes current number of characters)
std::cout << s[0] << \n; // ERROR (undefined behavior)
std::cout << s.front() << \n; // ERROR (undefined behavior)
s = "new value"; // OK
3.Re-using Moved-from Objects
你可能想 为什么 move以后值都被"偷"走了,还留着一个有用的对象干嘛?
std::vector<std::string> allRows;
std::string row;
while (std::getline(myStream, row))
{ // read next line into row
allRows.push_back(std::move(row)); // and move it to somewhere
}
我们利用row这个对象 循环接受键盘的输入
4.Move Assignments to Itself
对自己使用move
x = std::move(x);
// afterwards x is valid but has an unclear value
这就需要用户程序来保证了,你如何实现你的move