我在Visual Studio 2013中编译并运行以下代码,并打印出移动对象的内容没有变化。我知道移动的对象只能被销毁或从另一个对象分配,所以我的代码不是标准的抱怨。但无论如何......
#include <iostream>
#include <vector>
#include <string>
#include <utility>
struct Foo
{
std::string str;
std::vector<int> vec;
};
int main()
{
Foo foo = {"abc", {1, 2, 3}};
Foo foo2( std::move(foo) );
std::cout << foo.str.size() << '\n' << foo.vec.size() << '\n';
return 0;
}
输出结果为:
3
3
由于字符串和向量都定义了移动运算符,我希望我的类可以合成移动构造函数,将移动的对象留空。
答案 0 :(得分:4)
来自http://msdn.microsoft.com/en-us/en-en/library/hh567368.aspx
“Rvalue references v3.0”添加了自动生成的新规则 移动构造函数并移动赋值运算符 条件。但是,这不是在Visual C ++中实现的 Studio 2013,由于时间和资源的限制。