P.UNS.PTR.02 建议使用 NonNull<T> 来替代 *mut T

【描述】

尽量使用 NonNull 来包装 *mut T

NonNull 的优势:

  1. 非空指针。会自动检查包装的指针是否为空。
  2. 协变。方便安全抽象。如果用裸指针,则需要配合 PhantomData类型来保证协变。

【正例】


#![allow(unused)]
fn main() {
use std::ptr::NonNull;

let mut x = 0u32;
let ptr = NonNull::<u32>::new(&mut x as *mut _).expect("ptr is null!");

if let Some(ptr) = NonNull::<u32>::new(std::ptr::null_mut()) {
    unreachable!();
}
}