【发布时间】:2017-07-04 23:30:17
【问题描述】:
这个函数的实现是什么:
fn unbox<T>(value: Box<T>) -> T {
// ???
}
文档中唯一看起来像我想要的函数是Box::into_raw。以下将类型检查:
fn unbox<T>(value: Box<T>) -> T {
*value.into_raw()
}
这给出了错误error[E0133]: dereference of raw pointer requires unsafe function or block。将其包裹在 unsafe { ... } 块中可以修复它。
fn unbox<T>(value: Box<T>) -> T {
unsafe { *value.into_raw() }
}
这是正确的实现吗?如果是这样,为什么它不安全?什么意思?
也许这个问题显示了我对Boxs 实际工作方式的普遍不确定性。
【问题讨论】:
-
注意:在您提议的实现中,您正在泄漏由
Box分配的内存。