首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11智能指针策略

C++11智能指针策略
EN

Stack Overflow用户
提问于 2011-12-01 00:07:45
回答 1查看 7.4K关注 0票数 29

据我所知,在当前的C++11规范中,应该使用:

一个所有者的

  • std::unique_ptr<> (只有在无循环structure
  • std::weak_ptr<>中有多个所有者时,只有在需要中断
  • 的循环时,才有大多数的structure
  • std::weak_ptr<>)--当引用不足以满足

时,作为内存句柄的原始指针(没有所有权)

所以我的问题是:

  1. 这些策略足够了吗?还是我应该知道的其他策略?
  2. scoped_ptr<>auto_ptr<>实际上已经过时了吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-01 00:28:53

scoped_ptr<>和auto_ptr<>实际上已经过时了吗?

auto_ptr在C++11中不受欢迎,所以这是您的答案。scoped_ptr不存在于C++11中,也从未存在过。使用boost::scoped_ptr的主要原因是确保所有权永远不会转移(当然,除非您作弊)。同样,如果使用unique_ptr,只有在使用std::move或类似结构时才能传递所有权。或者,正如霍华德指出的,只要把它变成一个const std::unique_ptr就行了。

所以你是否需要额外的保险真的取决于你。而且,boost::scoped_ptr不支持删除器。所以unique_ptr可以玩boost::scoped_ptr不能玩的把戏。

只有当周期需要被打破时,

std::weak_ptr<>才会谨慎。

我不能说我一定同意这个政策。当对象可能想要与其他事物对话时,应该使用weak_ptr,但它不拥有其他东西。这意味着它可以在任何时候被删除,而weak_ptr的持有者需要能够在它试图与它交谈时处理该删除。

中断循环是weak_ptr的一种使用;它不应该是唯一一次使用它。

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8334886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档