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
块的情况下进行此操作?
是,您可以通过分配值来安全地执行此操作:
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;
}
另请参见: