Memory management 存储Vec与存储切片之间的区别是什么?
Rust提供了几种在用户定义的结构中存储元素集合的方法。可以为该结构提供自定义生存期说明符和对切片的引用:Memory management 存储Vec与存储切片之间的区别是什么?,memory-management,rust,Memory Management,Rust,Rust提供了几种在用户定义的结构中存储元素集合的方法。可以为该结构提供自定义生存期说明符和对切片的引用: struct Foo<'a> { elements: &'a [i32] } impl<'a> Foo<'a> { fn new(elements: &'a [i32]) -> Foo<'a> { Foo { elements: elements } } } 这两种方法之间
struct Foo<'a> {
elements: &'a [i32]
}
impl<'a> Foo<'a> {
fn new(elements: &'a [i32]) -> Foo<'a> {
Foo { elements: elements }
}
}
这两种方法之间的主要区别是什么
- 每当我调用
时,使用Bar::new(Vec![1,2,3,4,5])
是否会强制语言复制内存李>Vec
- 当所有者
超出范围时,Bar
的内容是否会被隐式销毁李>Vec
- 如果一个切片在其被传递到的结构之外使用,那么通过引用传入该切片是否有任何危险
A
Vec
由三部分组成:
Vec
表示内存的所有权,切片表示内存借用。Vec
需要在其自身解除分配时解除分配所有项和内存块(在Rust speak中删除)。当它超出范围时就会发生这种情况。切片掉落时不起任何作用
使用切片是没有危险的,因为生锈寿命就是这样处理的。这些确保了在引用失效后,您永远不会使用引用。每种类型的引用所包含的内容的分类非常清楚。
struct Bar {
elements: Vec<i32>
}
impl Bar {
fn new(elements: Vec<i32>) -> Bar {
Bar { elements: elements }
}
}