我正在尋找為什么 sized trait 不是物件安全的答案,例如:
trait Foo:Sized{}
Foo 不是物件安全的。
我讀過一些關于物件安全的帖子,比如object-safety和sizedness-in-rust。我發現深層原因是自動編譯器impl Foo for Foo。
我很困惑為什么編譯器會這樣做以及為什么這會導致Foo物件不安全?
非常感謝。
uj5u.com熱心網友回復:
impl Foo for Foo是在 Rust 中撰寫“Foo為 trait 物件實作 trait Foo”的方式。如果該 trait 的 trait 物件實作了該 trait,則該 trait 只能是物件安全的。顯然,擁有一個不實作自身的 trait 物件并沒有多大意義。
通過指定trait Foo : Sized {},您要求 的所有實作者Foo也必須實作Sized。但是 Rust 中的所有 trait 物件都是?Sized,這意味著它們可以不調整大小。因此 type 的 trait 物件Foo : Sized不能實作Foo,所以你不能寫
impl Foo for Foo
或者,換句話說,特征不是物件安全的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/325051.html
