调用std::make_shared(new Foo())
时,它会构造一个Foo并为调用者返回std::shared_ptr<Foo>
(即here)。如果从各种对象多次调用它,它每次构造一个new Foo()
吗?在这种情况下,它与每个调用者获得对新对象的单个引用没有什么不同,在实际操作中像unqiue_ptr一样?
或者它是第一次创建一个Foo()
,然后随后将std::shared_ptr
返回给它,因为它知道它将像一个单一的排序(当然删除一次最后{{1}被毁了)?这个平台是否具体?
特别是这样的功能:
std::shared_ptr
答案 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