c++ - 将 shared_ptr<T> 转换为 shared_ptr<void>

标签 c++ casting c++11 shared-ptr

我有一个结构:

struct Params {
   std::shared_ptr<void> user_data;
   /* ... */
};

我想这样使用它:

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;
}

这是有效且安全的吗?

最佳答案

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

关于c++ - 将 shared_ptr<T> 转换为 shared_ptr<void>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11624131/

相关文章:

c - 我是否要转换 malloc 的结果?

java - 如果 Java 是强类型的,那么为什么这段代码可以编译?

c++ - 声明 const 全局变量时是否需要静态?

c++ - "the procedure entry point _ZNSt8_detail15_List_node_base7_M_hookEPS0_ could not be located in the dynamic link library libstdc -6.dll."

c++ - 使用 for_each 标准或 boost 工具优化循环

C++ 指针运算 : alignment exception (0x801)

c++ - 使用智能指针指向const int的指针

c++ - "move semantics"和 "rvalue reference"的 Visual Studio 实现

c++ - "for each"是微软特有的吗?

c++ - 读取字符串直到行尾?