所有オブジェクトのライフスパンが所有者にリンクされている一般的な状況では、私は2つの方法のうちの1つを使用できます。 。unique_ptrを割り当てるかリセットする必要がありますか?
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では行われません。したがって、私はイニシャライザリストを使用することはできません。別に私はreset
を好むことから
owner() : owned(new someObject())
{}
あなたは役に立たない中間を作成しないよう:
私はそれが遅れていることを知っていますが、将来の読者のためだけです。彼の著書Effective Modern C++のScott Meyersによると、std :: make_uniqueが推奨されています。これは例外的な安全性を提供するためです:owner = std :: make_unique ()。問題は、std :: make_unique がC++ 14(C++ 11ではなく)の一部ですが、ここでは[ここ](https://isocpp.org/files/papers/N3656.txt)を見つけることができます。あなたがコピー貼り付けることができる良い実装。 –