所有オブジェクトの寿命がその所有者にリンクされている一般的な状況を考えると、2つの方法のいずれかで一意のポインターを使用できます。 。
割り当て可能:
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());
}
};
ベストプラクティスの観点から、ある形式を他の形式よりも優先する必要がありますか?
編集:ごめんなさい。これを単純化しました。ヒープの割り当ては、ctorではなく、initializeメソッドで行われます。したがって、初期化リストを使用できません。
_unique_ptr
_の_operator=
_のドキュメント から:
Rが指すオブジェクトの所有権を、
reset(r.release())
に続いてstd::forward<E>(r.get_deleter())
からの割り当てを呼び出すかのように* thisに転送します。
必要なのはreset
呼び出しだけなので、直接呼び出すだけの方が簡単です
これを行うための適切な方法(リストしなかった)は、owned
のコンストラクターを使用することです。
owner() : owned(new someObject())
{}
それとは別に、reset
をお勧めします。その場合、無駄な中間インスタンスを作成しないためです(オプティマイザーが多くのことを行えるので、マシンレベルで違いはないかもしれませんが)。