Rust---内部可变性
原因你应该已经知道,官方Cell使用了UnsafeCell,编译器对UnsafeCell做了特殊处理,让UnsafeCell不能对生命周期参数进行协变。需要注意的是,*const UnsafeCell as *mut T,未定义行为,需要通过UnsafeCell的get方法。从名字看是不安全的,实际上它是安全的,因为它的方法全都没有用unsafe修饰,只是它的核心方法get返回的是可变裸指针。有一个get方法,通过不可变引用(&T),获取到了可变裸指针 (*mut T),它是通过强转来实现的。
原创
2023-12-16 21:04:49 ·
486 阅读 ·
0 评论