-7

が呼び出されると、Foo を構築し、呼び出し元 (つまり、こちら)に対してstd::make_shared(new Foo())を返します。これがさまざまなオブジェクトから複数回呼び出される場合、毎回構築しますか? この場合、各呼び出し元が新しいオブジェクトへの単一の参照を取得し、実際には unque_ptr のように動作するのと同じでしょうか?std::shared_ptr<Foo>new Foo()

それともFoo()、最初に s を作成してから、ある種のシングルトンのように動作することを知って、それに s を返しますかstd::shared_ptr(もちろん、最後std::shared_ptrが破棄されると削除します)? これはプラットフォーム固有のものですか?

具体的には次のような機能です。

std::shared_ptr<Foo> makeFoo()
{
  return std::make_shared<Foo>();
}
4

1 に答える 1

5

いいえ、std::make_shared<Foo>()常に新しい Foo オブジェクトを作成し、それへのマネージド ポインターを返します。

との違いは、オブジェクトへの生きた参照は 1 つだけunique_ptrですが、ポインタへの複数の参照を持つことができることです。unique_ptr

auto x = std::make_shared<Foo>();
auto y = x; // y and x point to the same Foo
auto x1 = std::make_unique<Foo>();
auto y1 = x1; // Does not work
于 2014-08-06T13:10:51.870 に答える