-7

std::make_shared(new Foo())被调用时,它构造一个 Foo 并std::shared_ptr<Foo>为调用者返回一个(即此处)。如果从各种对象多次调用它,它是否new Foo()每次都构造一个?在这种情况下,与每个调用者获得对新对象的单个引用没有什么不同,实际上就像 unqiue_ptr 一样?

或者它Foo()是第一次创建一个然后返回std::shared_ptrs ,知道它会像某种单例一样(当然,一旦最后一个std::shared_ptr被销毁就删除)?这个平台是特定的吗?

特别是这样的功能:

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

1 回答 1

5

不,std::make_shared<Foo>()将始终创建一个新的 Foo 对象并返回指向它的托管指针。

不同之处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 回答