私は本当にC++ 98からC++ 11以上に移行しようとしています。私は新しいもののほとんどの上に私の頭を包みましたが、私はまだunique_ptr
の正しい使い方についてはわかりません。クラスメンバーのunique_ptrの正しい使い方
クラスAがunique_ptrメンバを持っている(私は前に生のポインタを使用していました!)以下の例を考えてみましょう。このメンバ変数は、ユーザが必要とするときに、他の場所の関数(クラスの一部ではない)を呼び出すことによって割り当てる必要があります。これは正しい使用法ですか?そうでない場合、最良の選択肢は何ですか?
class A {
private:
unique_ptr<MyType> mt;
public:
void initStuff() {
mt.reset(std::move(StaticFuncSomewhereElese::generateMyType()));
}
};
MyType* StaticFuncSomewhereElese::generateMyType() {
MyType* temp = new MyType(...);
//do stuff to temp (read file or something...)
return temp;
}
そこに 'std :: move'は必要ありません。生ポインタは移動できません。 – emlai
@tuple_catしかし、これは完璧にコンパイルされ実行されます。 –
@SaeidYazdaniあなたはそれを必要としません。代わりに 'std :: make_unique()'を使います。 –