MSVC编译器存在一个已知的缺陷,其中不会创建默认移动构件。std ::将一个std :: unique_ptr移动到stl容器中。 (MSVC编译器问题)
问题是我有很多的类似于这样的类:
struct User {
std::string FirstName;
std::string LastName;
std::string Address;
std::string PostalCode;
std::string City;
std::vector<std::unique_ptr<ProjectBase>> Projects;
};
如何采取一个类像这样并将其转换成的东西,会在这种情况下工作:
std::vector<std::unique_ptr<User>> users;
{
// I use this logic often (create a temporary object and move it into stl container
auto new_user=make_unique<User>();
users.push_back(std::move(new_a));
}
users.back()->FirstName="Should";
users.back()->LastName="Work";
std::cout << "First Name: " << users.back()->FirstName << std::endl;
上述代码不适用于Windows Phone 8(因为没有移动构造函数),但可以与Visual Studio 2012(v110)工具包一起工作。
如果我的用户类有移动构造函数,以便它可以与Windows Phone 8一起工作,它将如何?
是否有一些原因,你创建一个变量形式'make_unique'而不是只是'push_back(make_unique())'? –
2013-05-02 02:06:41
您是否尝试过'User(User &&)= default;'? – 2013-05-02 02:21:05
@VaughnCato:MSVC还不支持。 – 2013-05-02 02:43:41