我可以安全地将Box 投射到Box ?

问题描述 投票:-2回答:1

Send是标记特征,对内存布局没有任何影响。就是说,Any类型的机制对我来说仍然有点神秘。

是下面的代码声音,它是否可以执行我想要的操作:强制转换类型将始终正确地转换为原始的具体类型:

let what_i_have: Box<dyn Any + Send> = Box::new(69);
let ptr = Box::into_raw(what_i_have);
let what_i_want: Box<dyn Any> = unsafe { Box::from_raw(ptr as *mut dyn Any) };

我已经尝试过了,它“似乎工作正常”。是吗?

作为一个奖励问题,我是否可以在没有unsafe块的情况下进行此操作?

rust unsafe
1个回答
2
投票

是,您可以通过分配值来安全地执行此操作:

use std::any::Any;

fn main() {
    let what_i_have: Box<dyn Any + Send> = Box::new(69);
    let what_i_want: Box<dyn Any> = what_i_have;
}

另请参见:

© www.soinside.com 2019 - 2024. All rights reserved.