2013-06-04 17 views
34

插入的unique_ptr我有型ObjectArrayC++在地圖

typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray; 

什麼是創建一個unique_ptrClass1類型的新對象,並將其插入到ObjectArray類型的對象語法的C++對象?

+0

下面的MSDN頁面有一些這方面的信息:http://msdn.microsoft.com/en-us/library/vstudio/hh279676.aspx – yuyang

回答

47

作爲第一個評論,如果它是一張地圖而不是一個數組,我不會稱之爲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

+1的完整性和明晰。 – taocp

+0

@milleniumbug:好的建議,讓我把它添加到答案。謝謝 –

+1

另一個選項是emplace成員:myMap.emplace(0,new Class1)。不過,並不是所有的圖書館都支持這個成員。 –

34

如果你想添加一個現有的指針來插入地圖,你將不得不使用std :: move。

例如:

std::unique_ptr<Class1> classPtr(new Class1); 

myMap.insert(std::make_pair(0,std::move(classPtr)));