我有这样一个函数:
extern {
fn foo(layout: *const RawLayout) -> libc::uint8_t;
}
fn bar(layout: Layout) -> bool {
unsafe {
foo(&layout.into() as *const _) != 0
}
}
其中Layout
是可复制类型,可转换为.into()
和RawLayout
.
我想确保我了解正在发生的事情,因为这是不安全的.据我所知,layout.into()
创建一个临时RawLayout
,然后&
引用它,as *const _
将其转换为原始指针(*const RawLayout
).然后调用foo()
函数并返回,最后删除临时RawLayout
.
对吗?还是有什么棘手的原因让我不该这么做?