插入的unique_ptr我有型ObjectArray
C++在地圖
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
什麼是創建一個unique_ptr
到Class1
類型的新對象,並將其插入到ObjectArray
類型的對象語法的C++對象?
插入的unique_ptr我有型ObjectArray
C++在地圖
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
什麼是創建一個unique_ptr
到Class1
類型的新對象,並將其插入到ObjectArray
類型的對象語法的C++對象?
作爲第一個評論,如果它是一張地圖而不是一個數組,我不會稱之爲ObjectArray
。
無論如何,你可以插入對象是這樣的:
ObjectArray myMap;
myMap.insert(std::make_pair(0, std::unique_ptr<Class1>(new Class1())));
或者這樣說:
ObjectArray myMap;
myMap[0] = std::unique_ptr<Class1>(new Class1());
兩種形式之間的區別是,如果關鍵0
已經存在,前者將失敗在地圖上,第二個將用新的覆蓋它的價值。
在C++ 14中,您可能想要使用std::make_unique()
而不是從new
表達式構造unique_ptr
。例如:
myMap[0] = std::make_unique<Class1>();
+1的完整性和明晰。 – taocp
@milleniumbug:好的建議,讓我把它添加到答案。謝謝 –
另一個選項是emplace成員:myMap.emplace(0,new Class1)。不過,並不是所有的圖書館都支持這個成員。 –
如果你想添加一個現有的指針來插入地圖,你將不得不使用std :: move。
例如:
std::unique_ptr<Class1> classPtr(new Class1);
myMap.insert(std::make_pair(0,std::move(classPtr)));
下面的MSDN頁面有一些這方面的信息:http://msdn.microsoft.com/en-us/library/vstudio/hh279676.aspx – yuyang