结构中的字符串,生命周期

时间:2014-11-25 03:52:30

标签: rust

我知道这3个结构之间的区别是 - a

的生命周期
struct S1 {
    a: &'static str,
    b: int
}

struct S2<'aa> {
    a: &'aa str,
    b: int
}

struct S3 {
    a: String,
    b: int
}

fn main() {
    let s1 = S1 {a: "123", b: 123};
    let s2 = S2 {a: "123", b: 123};
    let s3 = S2 {a: "123".into_owned(), b: 123};
}

你能告诉我第一,第二和第三的用例,换句话说,什么时候使用第一和第二,第二,第二和第三,等等?在文档中没有解释。

1 个答案:

答案 0 :(得分:4)

S1 :这只允许您使用字符串文字或其他字符串static(即永远无法解除分配)生命周期。

S2 :这允许您使用任意字符串切片,前提是它们具有可表达的生命周期。例如,您无法从S2返回Iterator的动态实例,因为无法表达所涉及的生命周期。也就是说,这可以避免不必要的堆分配。

S3 :最常见,因为它拥有其内容,但需要使用堆分配。