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)工具包一起工作。
如果User类具有移动构造函数,那么它将如何与Windows Phone 8一起使用?
答案 0 :(得分:4)
只需调用std::move
即可为每个成员调用移动构造函数:
User(User&& u)
: FirstName(std::move(u.FirstName)),
LastName(std::move(u.LastName)),
Address(std::move(u.Address)),
PostalCode(std::move(u.PostalCode)),
City(std::move(u.City)),
Projects(std::move(u.Projects))
{}
另外,要使用make_unique<User>();
,您还需要一个用户定义的ctor,即User(){}
。