gpt4 book ai didi

data-structures - 何时使用 Box> 或 Vec>?

转载 作者:行者123 更新时间:2023-11-29 07:52:43 25 4
gpt4 key购买 nike

什么时候设计一个嵌套 BoxVec 的数据结构才有意义(反之亦然)?

似乎在大多数情况下,你想在堆上存储多个固定大小的东西,Box 是多余的,因为它唯一的(?)作用是堆分配一个 ~single值,而普通的 Vec 已经在堆中分配其存储空间。

上下文:我仍在思考各种 Rust 类型在构建数据结构方面的作用。

最佳答案

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

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

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

  • 对特定内存地址敏感的事物,以便包含的对象将保持相同的内存位置(实际上从来没有这种情况,在任何稳定的公共(public) API 中绝对不是这种情况;一些句柄要做的事情使用 std::sync::mpsc::Select 是我所知道的唯一情况;这种不安全和需要注意是 select! 存在的部分原因。这种事情 ( Handle.add) 是不安全的东西。

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

所以简单的版本是:

  • Box<Vec<T>> : 从来没有。
  • Vec<Box<T>> : 仅当 T 时是一个特征,即你正在使用特征对象。

关于data-structures - 何时使用 Box<Vec<..>> 或 Vec<Box<..>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29847928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com