当前位置 : 主页 > 网页制作 > css >

生锈 – 如何从“盒子”中获取自有值?

来源:互联网 收集:自由互联 发布时间:2021-06-13
这个函数的实现是什么: 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特别”.

网友评论