【发布时间】:2017-01-29 15:38:24
【问题描述】:
查看我偶然发现的Vec<T> 可用的方法
into_boxed_slice(self) -> Box<[T]>
String也有这样的方法(into_boxed_str(self))。将Deref 用于Vec<T>/String 的用处是显而易见的,这使得它们可以被视为共享切片(&[T]),但我认为拥有的切片没有任何用处(Box<[T]>)除了,也许,FFI。 Rust GitHub 存储库仅在少数情况下使用 into_boxed_slice()。
由于std 中提供了创建盒装切片的方法,并且该容器列在其主页上,我想我可能会遗漏一些有用的东西。在哪些情况下我应该使用拥有的切片来支持 Vec<T> 或 String?
【问题讨论】:
-
不确定是否是原因,但
Box<[T]>和Box<str>的指针大小少了一个整数,因为它们不需要容量——它们不能调整大小。 -
我想过这个,但我也觉得这不足以成为拥有专用容器的理由。
-
我不确定您所说的“专用容器”是什么意思。它只是现有类型的组合 -
Box和[T]或str。它与Box<Trait>并没有什么不同。 -
你说得对,虽然是在
std的主页上列出来,给人一种高贵的感觉:)。这就是我对它感兴趣的原因。 -
我猜这可能只是为了获取底层堆指针的一种廉价、安全的方式。实际上是一种“into_inner”方法。可能会提供以防有人真的想拥有底层缓冲区,因为它实施起来很简单。
标签: types rust containers slice boxing