何时使用 Box> 或 Vec>?

2024-05-03

什么时候设计一个嵌套的数据结构才有意义?Box and a Vec(或相反亦然)?

似乎在大多数情况下,您想在堆上存储多个固定大小的东西,Box是多余的,因为它唯一的(?)作用是堆分配一个〜单个值,以及一个正常的Vec已经在堆上分配其存储空间。

背景:我仍然在思考各种 Rust 类型在构建数据结构中的作用。


您实际上只需要使用几次Box:

  • 递归数据结构:与最外层元素无关,因此不需要Vec<Box<T>>.

  • 拥有的特征对象,必须是Box<Trait>因为物体的大小是动态的;

  • 对特定内存地址敏感的事物,以便所包含的对象将保持相同的内存位置(实际上从来没有这种情况,并且在任何稳定的公共 API 中绝对不是这种情况;一些句柄与std::sync::mpsc::Select这是我所知道的唯一案例;这种不安全和所需的护理是原因的一部分select! http://doc.rust-lang.org/std/macro.select!.html存在。这种事(Handle.add)是不安全的东西。

如果这些情况都不适用,你不应该使用Box. And Box<Vec<T>>就是这样的一个案例;拳击完全是多余的,增加了额外的间接性,但没有任何好处。

所以简单的版本是:

  • Box<Vec<T>>: never.
  • Vec<Box<T>>: 除非T是一个特质,即你正在使用特质对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用 Box> 或 Vec>? 的相关文章

随机推荐