给定这个结构:
struct TestS {
astr: String,
}
impl TestS {
pub fn new(s: String) -> Self { Self{ astr: s } }
pub fn get_ref(&self) -> &String { &self.astr }
pub fn get_val(&self) -> String { self.astr.clone() }
}
返回引用与返回值相比有什么缺点吗?我喜欢返回引用,因为它可以避免制作可能不必要的副本。 Rust 编译器应该防止悬空引用。如果需要,呼叫者可以复印一份。这是正确的吗?
根据经验:
Copy
,则按值返回。self
或可能已创建该值本身的方法),则按值返回它如果需要克隆,则应该在需要拥有值的地方完成(即示例中的调用者)。
根据 @vallentin 的评论,对于字符串,您通常会返回
&str
而不是 &String
。返回 &String
需要双重取消引用来访问实际字符串内容,而返回 &str
返回一个胖指针 - 指向字符串内容和长度的指针 - 因此不需要双重取消引用。