移动构造函数不移动

时间:2014-03-02 11:42:34

标签: c++

我在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

由于字符串和向量都定义了移动运算符,我希望我的类可以合成移动构造函数,将移动的对象留空。

1 个答案:

答案 0 :(得分:4)

来自http://msdn.microsoft.com/en-us/en-en/library/hh567368.aspx

  

“Rvalue references v3.0”添加了自动生成的新规则   移动构造函数并移动赋值运算符   条件。但是,这不是在Visual C ++中实现的   Studio 2013,由于时间和资源的限制。