这个函数的实现是什么: fn unboxT(value: BoxT) - T { // ???} 文档中唯一看起来像我想要的功能是Box :: into_raw.以下将进行类型检查: fn unboxT(value: BoxT) - T { *value.into_raw()} 这给出了错误错误[E
fn unbox<T>(value: Box<T>) -> T { // ??? }
文档中唯一看起来像我想要的功能是Box :: into_raw.以下将进行类型检查:
fn unbox<T>(value: Box<T>) -> T { *value.into_raw() }
这给出了错误错误[E0133]:原始指针的取消引用需要不安全的函数或块.将它包装在一个不安全的{…}块中可以修复它.
fn unbox<T>(value: Box<T>) -> T { unsafe { *value.into_raw() } }
这是正确的实施吗?如果是这样,为什么它不安全?这是什么意思?
也许这个问题显示了我对Boxs实际工作方式的一般不确定性.
取消引用该值:fn unbox<T>(value: Box<T>) -> T { *value }
回到1.0之前的Rust,堆分配的值是非常特殊的类型,他们使用了sigil~(如在~T中).沿着通往Rust 1.0的道路,这个特殊套管的大部分被拆除了……但不是全部.
这个特殊的专业名称为“deref move”,并且有一个关于它作为一流概念支持它的proto-RFC.在那之前,答案是“因为Box特别”.