爲什麼引用特徵對象不可複製?此代碼編譯:特徵對象的引用不可複製
struct Test;
fn clone_vec<'a>(v: Vec<&'a Test>) -> Vec<&'a Test> {
v.clone()
}
fn main() {
}
這一個不:
trait Test {
fn do_smt(&self);
}
fn clone_vec<'a>(v: Vec<&'a Test>) -> Vec<&'a Test> {
v.clone()
}
fn main() {
}
錯誤:
main3.rs:7:5: 7:14 error: failed to find an implementation of trait std::clone::Clone for &'a Test<no-bounds>
main3.rs:7 v.clone()
^~~~~~~~~
然而,Clone
特質是任何種類的參考實現,盡我所能參見:
impl<'a, T> Clone for &'a T {
/// Return a shallow copy of the reference.
#[inline]
fn clone(&self) -> &'a T { *self }
}
我只是不明白爲什麼&'a Test
其中Test
是一個不可複製的特徵。畢竟它只是一個指針。例如,該限制禁止從&[&'a SomeTrait]
到Vec<&'a SomeTrait>
,這看起來像一個明顯的轉換,或者克隆Vec<&'a SomeTrait>
,如示例中所示。
這是很奇怪的規定,我可以實現自己clone_vec()
,沒有Clone
:
fn clone_vec<'a>(v: Vec<&'a Test>) -> Vec<&'a Test> {
let mut result = Vec::new();
for &e in v.iter() {
result.push(e);
}
result
}
這就是我所懷疑的。我將等待DST。看起來這將是一個驚人的變化,許多新功能讓人們的生活變得輕鬆:)非常感謝你! –