原始指针
Rust通过限制智能指针的行为保障了编译时安全,不过仍需要对指针做一些额外的操作。
*const T
和*mut T
在Rust中被称为“裸指针”。它允许别名,允许用来写共享所有权的类型,甚至是内存安全的共享内存类型如:Rc<T>
和Arc<T>
,但是赋予你更多权利的同时意味着你需要担当更多的责任:
不能保证指向有效的内存,甚至不能保证是非空的
没有任何自动清除,所以需要手动管理资源
是普通旧式类型,也就是说,它不移动所有权,因此Rust编译器不能保证不出像释放后使用这种bug
缺少任何形式的生命周期,不像
&
,因此编译器不能判断出悬垂指针除了不允许直接通过
*const T
改变外,没有别名或可变性的保障
使用
创建一个裸指针:
解引用需要在unsafe
中进行:
Box<T>
的into_raw
:
如上说所,引用和裸指针之间可以隐式转换,但隐式转换后再解引用需要使用unsafe
:
Last updated