2014-03-02 64 views
3

我编译并在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

移动手段副本 – mangusta

+0

按照预期使用g ++ 4.7.2 –

+0

VS不会自动生成移动构造函数。 – Simple

回答