#reference #lifetime #borrow #scoped #abort #static #runtime-checked

no-std scoped_reference

运行时检查的借用生命周期

4 个版本

0.1.3 2023 年 2 月 4 日
0.1.2 2022 年 11 月 29 日
0.1.1 2022 年 11 月 29 日
0.1.0 2022 年 11 月 27 日

#13 in #abort

MIT/Apache

11KB
193 行代码(不含注释)

作用域引用

Crates.io Docs.rs

此crate提供了运行时检查的借用生命周期。它允许将形式为&'a T的引用作为具有生命周期'static的结构体存储。这在需要存储具有较短生命周期的引用时非常有用。

以下示例演示了作用域引用的使用。作用域引用有可变和不可变两种形式。如果在作用域内对底层数据的借用仍然存在时底层数据被释放,程序将崩溃。请注意,崩溃将总是导致立即终止 - 不允许回滚,因为允许回滚可能会导致悬垂引用和未定义的行为。

struct StaticBorrow(ScopedBorrow<i32>);

let mut x = 10;
let borrowed_x = &mut x;
let mut scoped_ref = ScopedReference::new_mut(borrowed_x);

let mut mut_ref_to_x = scoped_ref.borrow_mut();
*mut_ref_to_x = 9;

// Panic: mut_ref_to_x is still out!
// drop(scoped_ref);

drop(mut_ref_to_x);

let static_borrow = StaticBorrow(scoped_ref.borrow());
assert_eq!(*static_borrow.0, 9);

// Panic: static_borrow is still out!
// drop(scoped_ref);

drop(static_borrow);
drop(scoped_ref);

无运行时依赖

功能