• 鸠摩智
    2023-11-10 来自江苏
    &dyn TraitA没有所有权,而Box<dyn TraitA>有所有权。

    作者回复: 对的

    
    2
  • 哄哄
    2023-11-10 来自北京
    rust生命周期的独特设计,导致了该语言需要设计一些处理方式应对特殊情况,比如生命周期的标注(主要是给编译器进行代码处理时的提示)。事实上,我们在日常开发中应该避免一些陷入复杂情况的方式:比如,传入参数都用引用(borrow),传出结果都应该是owner。rust也为我们提供了处理各种情况的工具。所以,一般来说,我们应该在传入参数的时候用&dyn T,传出结果用Box<dyn T>。

    作者回复: 真不错👍

    
    1
  • 哄哄
    2023-11-10 来自北京
    关联类型之所以要单独设计,因为编译器可以通过输入判断具体类型,而无法推断出输出类型,所以,输出的类型需要明确指定

    作者回复: 思考方式很棒!

    
    1
  • PEtFiSh
    2023-11-10 来自上海
    &dyn TraitA 是实现了TraitA的类型的对象的引用,Box<dyn Trait>则是获取了该对象的所有权。
    
    
  • -
    2023-11-10 来自北京
    最后安全的trait object听的似懂非懂,为什么是安全的,为什么是不安全的?希望具体讲下原因
    
    
  • 一个人旅行
    2023-11-10 来自北京
    1. &dyn TraitA 是一个引用,引用指向实现了TraitA特征的具体类型,没有这个具体类型的所有权,相当于借用。 2. Box<dyn TraitA> 是一个智能指针,将实现了TraitA特征的具体类型保存在堆上,并且拥有这个具体类型的所有权。
    
    