2

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 一起使用,它会是什么样子?

4

1 回答 1

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(){}

于 2013-05-02T02:44:39.893 回答