2 个不稳定版本
0.2.0 | 2023年4月10日 |
---|---|
0.1.9 | 2023年4月9日 |
9 在 #dropped
每月112次 下载
13KB
244 代码行,不包括注释
AutoVec
Vec 自动移除正在被丢弃的子元素。
这个包仍在开发中!如果您发现了任何错误或问题,请在 github issues 上报告,这将非常感谢。
此包的目的
此包的目的是创建一个容器,以收集要一起读取或处理的变量,同时仍然允许单个变量自由修改。
这意味着容器需要存储原始指针而不是引用。然而,如果子变量被移动或丢弃,原始指针将指向无效数据。因此,需要从向量中移除已丢弃的子元素,并且其内存位置不能改变。
幸运的是,Rust 提供了 Drop
特性,允许定义一个在变量被丢弃时调用的 drop()
回调,可以用来通知容器移除已丢弃的子元素。
Rust 还提供了 pin
防止子元素被移动,从而改变其在内存中的位置。
此外,请注意,修改子元素本身,例如 child1 = child2
将导致 child1 被丢弃,从而从 vec 中移除。这是必需的,因为上述操作将更改其容器的指针。
示例
use auto_vec::*;
let mut t1 = AutoChild::new(0);
let mut t2 = AutoChild::new(1);
let mut v = AutoVec::new();
v.add(&mut t1);
v.add(&mut t2);
println!("{:?}", v);
drop(t1);
println!("{:?}", v);
// t1 has been automatically removed from the vector
use auto_vec::*;
fn main() {
let mut t1 = AutoChild::new(0);
let mut t2 = AutoChild::new(1);
let mut v = AutoVec::new();
v.add(&mut t1);
v.add(&mut t2);
for i in &mut v {
*i = 3;
}
println!("{:?}", v);
}