1. ホーム
  2. c++

unique_ptrを代入するべきか、リセットするべきか?

2023-08-19 13:23:48

質問

所有するオブジェクトの寿命がその所有者にリンクされているという一般的な状況を考えると、私は2つの方法のうちの1つをユニークポインタとして使用することができます .

割り当てることができます。

class owner
{
    std::unique_ptr<someObject> owned;    
public:
    owner()
    {
        owned=std::unique_ptr<someObject>(new someObject());        
    }
};

リセット方式を利用することができます。

class owner
{
    std::unique_ptr<someObject> owned;    
public:
    owner()
    {
        owned.reset(new someObject());
    }
};

ベストプラクティスの観点から、どちらかの形式を選ぶべきでしょうか?

EDITです。 みなさん、すみません。簡略化しすぎました。ヒープの確保はctor内ではなく、initialiseメソッド内で行われます。そのため、initialiser listは使えません。

どのように解決するのですか?

から のドキュメントを参照してください。 unique_ptr 's operator= :

を呼び出したかのように、r が指すオブジェクトの所有権を *this に移行させる。 reset(r.release()) を呼び出し、その後に std::forward<E>(r.get_deleter()) .

そして、その必要なものは reset の呼び出しだけなので、これを直接呼び出す方が簡単です。