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
11KB
193 行代码(不含注释)
作用域引用
此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);