1 个不稳定版本
0.1.0 | 2024年4月22日 |
---|
#7 in #cleaning
在 webtric 中使用
8KB
95 代码行,不含注释
Rawn
原始指针清理助手。
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