Rustは、ユーザー定義の構造体に要素のコレクションを格納するいくつかの方法を提供します。構造体は、カスタム寿命指定子、およびスライスへの参照を与えることができます。Vecとスライスの保存の違いは何ですか?
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 }
}
}
これら二つのアプローチの主な違いは何ですか?
- 私は
Bar::new(vec![1, 2, 3, 4, 5])
と呼ぶ度にVec
を使用してメモリをコピーしますか? Vec
の内容は、所有者Bar
が有効範囲外になると暗黙的に破棄されますか?- 渡される構造体の外側で使用されている場合、参照によってスライスを渡すことに関連する危険性はありますか?
各タイプの内訳は非常に分かりやすいです。 – KChaloux