2013-06-04 7 views
34

にunique_ptrを挿入し、私はタイプObjectArrayのC++オブジェクトC++マップ

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

を持っているタイプClass1の新しいオブジェクトにunique_ptrを作成し、タイプObjectArrayのオブジェクトに挿入するための構文は何ですか?

+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が既に存在している場合は、前者が失敗するということですマップ内では2番目の値は新しい値で上書きされます。

C++ 14では、new式からunique_ptrを構成する代わりに、std::make_unique()を使用することができます。例:

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)));