我今天遇到了以下问题:
use std::mem::{size_of, MaybeUninit};
struct Foo<'a> {
foo: &'a i32,
}
fn main() {
println!("{}", size_of::<Option<Foo>>()); // 8
println!("{}", size_of::<Option<MaybeUninit<Foo>>>()); // 16 (!)
}
因此,尽管
#[repr(transparent)]
,MaybeUninit
可能会产生“副作用”
类型布局,因为它显然抑制了利基优化。
有没有办法让我创建一个没有这个问题的类型,比如说
PhantomSlot<T>
?
我需要一种类型
T
Drop
,无论T如何ManuallyDrop
:
use std::mem::{size_of, ManuallyDrop};
struct Foo<'a> {
foo: &'a i32,
}
fn main() {
println!("{}", size_of::<Option<Foo>>()); // 8
println!("{}", size_of::<Option<ManuallyDrop<Foo>>>()); // 8
}