std :: make_shared(new Foo())是否会创建单例?

时间:2014-08-06 13:06:47

标签: c++ c++11 make-shared

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

或者它是第一次创建一个Foo(),然后随后将std::shared_ptr返回给它,因为它知道它将像一个单一的排序(当然删除一次最后{{1}被毁了)?这个平台是否具体?

特别是这样的功能:

std::shared_ptr

1 个答案:

答案 0 :(得分: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