67

タイプのC++オブジェクトがありますObjectArray

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

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

4

3 に答える 3

87

最初の発言として、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 では、式からstd::make_unique()を構築する代わりに使用したい場合があります。例えば:unique_ptrnew

myMap[0] = std::make_unique<Class1>();
于 2013-06-04T17:19:36.067 に答える
67

マップに挿入する既存のポインターを追加する場合は、std::move を使用する必要があります。

例えば:

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

myMap.insert(std::make_pair(0,std::move(classPtr)));
于 2014-01-16T07:52:46.530 に答える