Rust提供了几种方法来存储用户定义结构中的元素集合。结构体可以被赋予自定义生命周期指定符,并引用一个切片:
struct Foo<'a> {
elements: &'a [i32]
}
impl<'a> Foo<'a> {
fn new(elements: &'a [i32]) -> Foo<'a> {
Foo { elements: elements }
}
}
或者可以给它一个Vec
对象:
struct Bar {
elements: Vec<i32>
}
impl Bar {
fn new(elements: Vec<i32>) -> Bar {
Bar { elements: elements }
}
}
这两种方法之间的主要区别是什么?
- 使用
Vec
时,每次调用Bar::new(vec![1, 2, 3, 4, 5])
是否会强制语言复制内存? Vec
的内容是否会在所有者Bar
超出作用域时被隐式销毁?- 如果在传递给结构体之外的位置使用了传入的切片参数,是否存在任何危险性?