1个不稳定发布
0.1.0 | 2023年9月23日 |
---|
#5 in #initialized
8KB
70 行
init_cell
一个可以非安全初始化或内部修改,但安全访问的单元格
此库主要用于静态变量。该单元格可以安全访问,但在访问之前必须进行初始化。没有同步机制来确保初始化被观察到,因此应在主函数的开始处或使用类似于ctor
的crate进行初始化。
示例
use init_cell::InitCell;
// SAFETY: We will initialize the cell before using it.
pub static MY_VAL: InitCell<Vec<i32>> = unsafe { InitCell::new() };
fn main() {
// SAFETY: Nothing is accessing the cell.
unsafe {
InitCell::init(&MY_VAL, vec![1, 2, 3]);
}
assert_eq!(MY_VAL.iter().sum::<i32>(), 6);
// The cell can be mutated, too, which drops the previous value.
unsafe {
InitCell::set(&MY_VAL, vec![4, 5, 6]);
}
assert_eq!(MY_VAL.iter().sum::<i32>(), 15);
}
许可协议
许可协议为以下之一
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据Apache-2.0许可协议定义,任何有意提交给作品并由你拥有的贡献,将如上所述双重许可,无需任何额外条款或条件。