タイプObjectArray
のC++オブジェクトがあります
typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
unique_ptr
型の新しいオブジェクトにClass1
を作成し、_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());
_
2つの形式の違いは、キー_0
_がマップに既に存在する場合、前者は失敗しますが、2番目の形式はその値を新しい形式で上書きすることです。
C++ 14では、new
式から_unique_ptr
_を構築する代わりに、 std::make_unique()
を使用できます。例えば:
_myMap[0] = std::make_unique<Class1>();
_
マップに挿入する既存のポインターを追加する場合は、std :: moveを使用する必要があります。
例えば:
std::unique_ptr<Class1> classPtr(new Class1);
myMap.insert(std::make_pair(0,std::move(classPtr)));
以前の回答に加えて、メソッドemplace
(コピーを作成できない/したくない場合に便利です)もあることを指摘したかったので、次のように記述できます。
ObjectArray object_array;
auto pointer = std::make_unique<Class1>(...); // since C++14
object_array.emplace(239LL, std::move(pointer));
// You can also inline unique pointer:
object_array.emplace(30LL, std::make_unique<Class1>(...));