make_foo
ヘルパーを持っている方が効率的かもしれません。または、少なくともmake_shared
呼び出しを自分で使用してください。その結果、shared_ptr
がnew
式から構築されたものより効率的になる可能性があります。 Stuff
が実際にコンストラクタ引数を取る場合と、民間補助コンストラクタは、適切な次のようになります。あなたは上記のmake_foo
にFoo::make
をラップ、またはそれを直接使用することができますいずれか
struct Foo
{
template <typename ...Args>
static Foo make(Args &&... args)
{
return Foo(direct_construct(), std::forward<Args>(args)...);
};
private:
struct direct_construct{};
template <typeaname ...Args>
Foo(direct_construct, Args &&... args)
: m_myStuff(std::make_shared<Stuff>(std::forward<Args>(args)...)) // #1
{ }
};
:
auto f = Foo::make(true, 'x', Blue);
、言ったあなたがない限り本当にの共有の所有権は、std::unique_ptr<Stuff>
の方がより好ましいアプローチのように聞こえます。それは、概念的にははるかに単純であり、やや効率的です。その場合、#1
と記された行にm_myStuff(new Stuff(std::forward<Args>(args)...))
と書かれています。
@sellibitze typo – Baz
実際、「Foo」は所有権を取っていません。 'shared_ptr'のポイントは* share * ownershipです。 – juanchopanza
また、 'std :: shared_ptr foosStuff(new Stuff());' –
stefaanv