我试图了解对象安全的想法。我从文档中了解到,对象安全是指:
Self: Sized
如果物体安全所需的两个条件中的任何一个被取消,那么可以想象可以导致安全生锈的安全失败的事情可以实现吗?
答案 0 :(得分:8)
来自Where Self Meets Sized: Revisiting Object Safety:
只有当编译器可以自动为它自己实现时,trait才是对象安全的,方法是通过存储在trait对象中的vtable将每个方法实现为动态函数调用。
如果没有对象安全规则,可以编写具有特征对象满足的类型签名的函数,其中内部使得无法实际使用特征对象。
我相信选择"对象安全"回想起来可能是一个糟糕的人,因为它似乎与记忆安全无关,正常使用术语"(un)safe"在Rust。
对象"能力"可能更接近事实;能够通过特征对象引用的特征。