首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将shared_ptr<T>转换为shared_ptr<void>

将shared_ptr<T>转换为shared_ptr<void>
EN

Stack Overflow用户
提问于 2012-07-24 12:22:51
回答 2查看 1.8K关注 0票数 9

我有一个结构:

代码语言:javascript
复制
struct Params {
   std::shared_ptr<void> user_data;
   /* ... */
};

我想这样使用它:

代码语言:javascript
复制
int main() {
  std::shared_ptr<SpecializedParams> sp(new SpecializedParams(100));
  Params params;
  /* ... */
  params.user_data = std::static_pointer_cast<void>(sp); 
  /* ... */
  std::shared_ptr<SpecializedParams> sp2 = 
    std::static_pointer_cast<SpecializedParams>(
      params.user_data
    );
  /* ... */
  return 0;
}

这是有效和安全的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-24 14:56:00

实际删除共享对象的代码是在创建共享指针时确定的(这就是为什么在构造shared_ptr时需要完整类型,而在析构shared_ptr时不需要)。因此,即使您的shared_ptr是指向SpecializedParams对象的最后一个指针,该对象也会被正确销毁。

票数 8
EN

Stack Overflow用户

发布于 2012-07-24 12:55:06

这应该是安全的,因为无效的强制转换项也是一个shared_ptr。它将添加一个对现有元素的引用,直到空的强制转换项消失,它才会被释放。

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

https://stackoverflow.com/questions/11624131

复制
相关文章

相似问题

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