gpt4 book ai didi

rust - 通过取消引用来延长对象的生命周期

转载 作者:行者123 更新时间:2023-12-03 11:38:10 24 4
gpt4 key购买 nike

我想定义一个表示图形中节点的结构,但是以某种方式可以稍后删除引用。使用Box或Rc会很容易,但我不希望不对其进行堆分配。
我相信这个问题可以抽象为:

struct B<'a> {  
b: Option<&'a B<'a>>,
}

fn f() {
let mut b: B;
{
let a = B { b: None };
b = B { b: Some(&a) };
b.b.take();
}
b;
}
因此,这对于让var b驻留在外部块中是完全可以的,但是编译器在这里似乎过于严格。
任何想法如何解决这个问题?

最佳答案

这不是编译器的限制性,
当你声明

struct B<'a> {  
b: Option<&'a B<'a>>,
}
您告诉编译器B.b的生存时间只要B
然后您要告诉编译器b的生命周期为b,而B的生命周期为a的生命周期。
#[derive(Debug)]
struct Foo {
b: i32,
}

struct Wrap<'a, 'b>{
a: Option<&'a Foo>,
b: Option<&'b Foo>,

}


fn main() {
let mut w = Wrap {
a: None,
b: None,
};
w.b = Some(&Foo{b:0});
{

w.a = Some(&Foo{b: 1});
w.a.take();

}
println!("b = {:?}", w.b);
}
我不知道此代码是否会有所帮助,但是TLDR必须指定第二个生存期。

关于rust - 通过取消引用来延长对象的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65906258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com