我希望为下面这个结构体编写一个初始化器。
这也不起作用,因为我猜我们只是借用了值而没有转移所有权,这将在
在这种情况下,我是否被迫在结构体中使用
编辑:请注意,需要引用的原因是因为在我的情况下,
struct Foo {
bar: &Bar
}
对于灵活性,建议使用&T
而不是Box<T>
,这也是我在这里所追求的。如果没有初始化器,您可以像这样使用结构体。
{
let bar = ...;
let foo = Foo { bar: bar };
// use foo
// dealloc bar and foo
}
这样也可以用,但我想在初始化器中分配 &Bar
。显然,在堆栈上分配 bar
是不起作用的,因为一旦初始化器返回,它就会超出作用域。所以我想我可以使用 Box
。
fn new() -> Foo {
let bar = Box::new(...);
Foo { bar: &*bar }
}
这也不起作用,因为我猜我们只是借用了值而没有转移所有权,这将在
new
返回后仍然释放bar
。在这种情况下,我是否被迫在结构体中使用
Box
?编辑:请注意,需要引用的原因是因为在我的情况下,
Bar
实际上是一个通用特征,因此大小可能会变化,这意味着在堆栈上分配内存是行不通的。