Nar*_*rek 36 c++ boost smart-pointers shared-ptr scoped-ptr
scoped_ptr不能复制,并且正在删除范围之外.所以它有点受限制shared_ptr.因此,除了您真正需要限制复制操作的情况之外,shared_ptr最好使用.因为有时您不知道需要创建对象的副本或不需要.所以问题是:除了上面提到的情况之外,我们shared_ptr是否可以考虑使用更好(或推荐)代替scoped_ptr.是否scoped_ptr更快地工作shared_ptr,或者它有什么优势?
谢谢!
Mik*_*our 69
shared_ptr比重量级更重要scoped_ptr.它需要分配和释放引用计数对象以及托管对象,并处理线程安全引用计数 - 在我工作的一个平台上,这是一个重要的开销.
我的建议(一般)是使用满足您需求的最简单的对象.如果您需要参考计数共享,请使用shared_ptr; 如果您在完成单个参考后只需要自动删除,请使用scoped_ptr.
pet*_*hen 16
性能 - shared_ptr具有更多功能,但也需要额外的分配(它也更大,但这很少重要).
[edit]通过使用可以避免第二次分配make_shared,但是weak_ptr即使在对象被销毁之后也会保留整个分配,这对于大型对象可能是个问题.  
使用scoped_ptr您的意图表达更明确地说明您想要做什么.(万一你想知道 - 这是一件好事:)).如果您正确执行此操作,shared_ptr还将指示"此对象旨在超出此范围"
它们的预期目的不同,因此,在许多情况下,"shared_ptr vs scoped_ptr"根本不是问题.当然,当你需要的只是一个scoped_ptr时,你可以使用shared_ptr.但重点是什么?shared_ptr可能涉及所有引用计数的稍大开销.