在Rust中处理类型str
的值是笨拙的,因为它们没有实现特征Sized
。因此,它们只能通过指针访问。
对于我的应用程序,使用具有生命周期的普通指针并不是很有帮助。相反,我想要一个拥有胖指针,它可以保证包含的对象在指针执行时(并且不再)持续,但允许保持未知大小的值。
答案 0 :(得分:2)
Box<T>
适用于未投标的T
;因此Box<str>
,Box<[T]>
等等。 Box<str>
和String
之间要注意的重要区别是,后者也有一个容量成员,将其内存使用量增加一个字,但允许有效的追加,因为它可能不需要为每次推送重新分配,而Box<str>
上的类似方法则需要。 Box<[T]>
与Vec<T>
的情况也是如此,前者是固定大小的切片,而后者可以方便地生长。与Box<str>
不同,Box<[T]>
实际上是在现实生活中使用的; vec!
宏使用它来提高效率,因为Box<[T]>
可以按字面写出,然后免费转换为Vec<T>
。