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