ohb*_*ain 3 unsafe undefined-behavior rust raw-pointer
根据文档,ManuallyDrop<T>是一个零成本的包装.这是否意味着我可以取消引用从原始指针转换ManuallyDrop<T>到的原始指针T?
ManuallyDrop被声明为#[repr(transparent)]:
#[stable(feature = "manually_drop", since = "1.20.0")]
#[lang = "manually_drop"]
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct ManuallyDrop<T: ?Sized> {
value: T,
}
Run Code Online (Sandbox Code Playgroud)
#[repr(transparent)]被描述为:
该属性可以应用于包含单个字段的类型类型的结构.它表示newtype应该与该字段的类型完全相同,即,对于ABI purpopses [sic]应该忽略newtype:它不仅在内存中布局相同,而且在函数调用中也相同地传递.
[...]
PtrWithCustomZst也表示完全相同*const Foo
我相信这种转变是安全的.
真正的问题是你为什么要这样做?指向ManuallyDrop结构的指针似乎毫无意义.如果你有一个指向a的指针T,则不会删除基础值以开始.如果将指针转换为引用(同时确保遵守引用规则),则引用也不会丢弃基础值.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |