1 个不稳定版本

0.1.0 2024年4月22日

#7 in #cleaning


webtric 中使用

MIT 许可证

8KB
95 代码行,不含注释

Rawn

Crates.io docs.rs

原始指针清理助手。

BoxRaw

特质 BoxRaw 默认为 mut 原始指针的元组实现。

结构 BoxRaws 是包裹 BoxRaw 实现类型的新类型结构。

使用

use rawn::{BoxRaw, BoxRaws};

// declare a raw pointer
let x: *mut u8 = Box::into_raw(Box::new(0u8));
// destruct it with `clean()` method of trait `BoxRaw`
x.clean();

// below code would work, but it's accessing dangling pointer.
// which is already cleaned out.
// rust's miri test would not pass this case.
{
  unsafe {
    let _ = *x;
  }
}

// BoxRaw is implemented for tuples of mut raw pointers.
// Available tuple size is from 1 to 12.
let a = Box::into_raw(Box::new(String::from("raw")));
let b = Box::into_raw(Box::new(12.));
let c: Box<Vec<u8>> = Box::new(vec![0, 1, 2]);
let c: *mut Vec<u8> = Box::into_raw(c);

let x = (a, b, c);
x.clean();

// `BoxRaws` is new type struct wrapping a tuple of raw pointers.
// It implements BoxRaw too.
let a = Box::into_raw(Box::new(0u8));
let b = Box::into_raw(Box::new(1u8));
let raws = BoxRaws::new((a, b));
raws.clean();
// BoxRaw is only for raw pointers which are declared using `Box::into_raw()`.
// Thus, Using coerced mutable references would make errors.
// This code will panic:
let mut c: Vec<u8> = vec![0, 1, 2];
let c: *mut Vec<u8> = &mut c;
c.clean();

依赖项

~4KB