我有这样的功能:
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
删除临时函数.
那是对的吗?还是有一些棘手的原因我不应该这样做?