У меня есть такая функция:
extern {
fn foo(layout: *const RawLayout) -> libc::uint8_t;
}
fn bar(layout: Layout) -> bool {
unsafe {
foo(&layout.into() as *const _) != 0
}
}
Где Layout
- тип с возможностью копирования, который может быть преобразован .into()
a RawLayout
.
Я хочу убедиться, что я понимаю, что происходит, поскольку это небезопасно. Как я понимаю, layout.into()
создает временную RawLayout
, тогда &
берет ссылку на нее, а as *const _
преобразует ее в необработанный указатель (*const RawLayout
). Затем вызывается функция foo()
и возвращается, и, наконец, временная RawLayout
отбрасывается.
Это правильно? Или есть какая-то сложная причина, почему я не должен этого делать?