我有一个结构:
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;
}这是有效和安全的吗?
发布于 2012-07-24 14:56:00
实际删除共享对象的代码是在创建共享指针时确定的(这就是为什么在构造shared_ptr时需要完整类型,而在析构shared_ptr时不需要)。因此,即使您的shared_ptr是指向SpecializedParams对象的最后一个指针,该对象也会被正确销毁。
发布于 2012-07-24 12:55:06
这应该是安全的,因为无效的强制转换项也是一个shared_ptr。它将添加一个对现有元素的引用,直到空的强制转换项消失,它才会被释放。
https://stackoverflow.com/questions/11624131
复制相似问题