鸠摩智
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特征的具体类型保存在堆上,并且拥有这个具体类型的所有权。