#automatic #child #remove #vec #auto #dropped

auto_vec

Vec 自动移除正在被丢弃的子元素

2 个不稳定版本

0.2.0 2023年4月10日
0.1.9 2023年4月9日

9#dropped

Download history 1/week @ 2024-03-30

每月112次 下载

MIT 许可证

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);
}

无运行时依赖