【发布时间】:2012-07-22 08:57:56
【问题描述】:
我有一个结构:
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;
}
这是有效和安全的吗?
【问题讨论】:
-
主块中的参数是什么?
-
你不能
delete一个空指针,所以你的代码甚至不应该编译。 -
@KerrekSB 指向 void 的共享指针当然是有效的。更多详情请看这里:stackoverflow.com/questions/5913396/…
-
@MichaelAnderson:哦,好吧,删除器是从参数中推导出来的,而不是从指针类型中推导出来的 - 有趣!
-
您可能想使用
static_pointer_cast而不使用std::。由于依赖于参数的查找,它仍然可以工作。
标签: c++ casting c++11 shared-ptr