我有一个结构:
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/