【问题标题】:Extracting a raw pointer from a shared_ptr从 shared_ptr 中提取原始指针
【发布时间】:2014-04-09 12:45:58
【问题描述】:

是否可以从std::shared_ptrstd::tr1::shared_ptr 对象中提取原始指针?目的是告诉智能指针对象我不希望它再管理对象的生命周期。上下文是我有一个 API,它从用户那里获取原始指针并对对象进行一些处理。为了让 API 更易于管理,从这个原始指针中创建了一个 shared_ptr。现在,用户可能会要求返回对象。在这种情况下,当将处理后的对象返回给用户时,我想返回原始指针。但是,我还没有找到一种方法来做到这一点。无法使用.get(),因为智能指针必须无限期地保持活动状态。我会回馈unique_ptr,但这在tr1 中不可用。

基本上我想将原始指针移出 shared_ptr。

【问题讨论】:

  • 你能用代码做一个例子吗?我不太明白你为什么要返回一个指向用户的指针。
  • 指针是指向你可以控制的类,还是派生自你可以控制的类?
  • @Jefffrey ,不幸的是,代码示例太复杂了。刚意识到解释起来有多么困难,我开始认为我需要改变我的设计:)
  • @341008,是的,看起来你应该这样做。 :)

标签: c++ shared-ptr tr1


【解决方案1】:

我认为您正在搜索shared_ptr 的方法release()。抱歉 - 设计上没有这样的方法。

在这里,我找到了一种有趣的方式来做你想做的事 - https://stackoverflow.com/a/13701773/233885

您应该考虑在您的上下文中再次使用shared_ptr(所有权)。

【讨论】:

  • 是的,我正在寻找release() 方法。对于像我这样的非专家来说,该帖子中建议的答案可能太冒险了。我不想追踪其中的错误:)。我想我将不得不重新考虑我的设计。还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 2019-09-29
  • 2012-09-07
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
相关资源
最近更新 更多