这个函数的实现是什么:
fn unbox<T>(value: Box<T>) -> T {
// ???
}
Run Code Online (Sandbox Code Playgroud)
文档中唯一看起来像我想要的功能Box::into_raw.以下将进行类型检查:
fn unbox<T>(value: Box<T>) -> T {
*value.into_raw()
}
Run Code Online (Sandbox Code Playgroud)
这给出了错误error[E0133]: dereference of raw pointer requires unsafe function or block.将其包装在一个unsafe { ... }块中可以修复它.
fn unbox<T>(value: Box<T>) -> T {
unsafe { *value.into_raw() }
}
Run Code Online (Sandbox Code Playgroud)
这是正确的实施吗?如果是这样,为什么它不安全?这是什么意思?
也许这个问题显示了我对如何Box实际工作的一般不确定性.
She*_*ter 37
取消引用该值:
fn unbox<T>(value: Box<T>) -> T {
*value
}
Run Code Online (Sandbox Code Playgroud)
回到1.0之前的Rust,堆分配的值是非常特殊的类型,并且它们使用了sigil ~(如~T).沿着通往Rust 1.0的道路,这个特殊套管的大部分被拆除了......但不是全部.
这个特殊的专业名称为"deref move",并且有一个关于支持它作为一流概念的原型RFC.在那之前,答案是"因为Box特殊".
| 归档时间: |
|
| 查看次数: |
10664 次 |
| 最近记录: |