c – 我什么时候应该更喜欢`shared_ptr`到`make_shared`?

c – 我什么时候应该更喜欢`shared_ptr`到`make_shared`?,第1张

概述参见英文答案 > Initializing shared_ptr member variable, new vs make_shared?                                    2个 正如 Difference in make_shared and normal shared_ptr in C++的答案所指出的那样,make_shared在大多数情况下都优于shar 参见英文答案 > Initializing shared_ptr member variable,new vs make_shared?                                    2个
正如 Difference in make_shared and normal shared_ptr in C++的答案所指出的那样,make_shared在大多数情况下都优于shared_ptr.

那么为什么C标准一起定义shared_ptr和make_shared?是否有任何情况我应该更喜欢shared_ptr到make_shared,甚至我只能使用shared_ptr但不能使用make_shared?

解决方法 其中一种情况是 std::make_shared不支持指定自定义删除器.

Unlike the std::shared_ptr constructors,std::make_shared does not allow a custom deleter.

你只能使用std::shared_ptr的构造函数来完成它,例如

std::shared_ptr<Foo> sh5(new Foo,[](auto p) {   std::cout << "Call delete from lambda...\n";   delete p;});

另一个问题就像链接的帖子所解释的那样,std :: make_shared只对控制块和指向的对象执行一次分配.这意味着在对象被销毁之后,它占用的内存可能不会立即被释放.这可能会导致一些内存使用问题.

总结

以上是内存溢出为你收集整理的c – 我什么时候应该更喜欢`shared_ptr`到`make_shared`?全部内容,希望文章能够帮你解决c – 我什么时候应该更喜欢`shared_ptr`到`make_shared`?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1217766.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存