にunique_ptrを挿入し、私はタイプObjectArray
のC++オブジェクトC++マップ
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
を持っているタイプClass1
の新しいオブジェクトにunique_ptr
を作成し、タイプObjectArray
のオブジェクトに挿入するための構文は何ですか?
にunique_ptrを挿入し、私はタイプObjectArray
のC++オブジェクトC++マップ
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
を持っているタイプClass1
の新しいオブジェクトにunique_ptr
を作成し、タイプObjectArray
のオブジェクトに挿入するための構文は何ですか?
地図であり配列でない場合は、最初の発言は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をし、明快さ。 – 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