如何创建指向未确定大小类型的拥有指针?
How can I create an owning pointer to an unsized type?
在 Rust 中处理类型 str
的值很笨拙,因为它们没有实现特征 Sized
。因此,它们只能通过指针访问。
对于我的应用程序,使用带有生命周期的普通指针不是很有帮助。相反,我想要一个拥有的胖指针,它保证所包含的对象将持续到指针存在的时间(并且不再),但允许持有未知大小的值。
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>
。
在 Rust 中处理类型 str
的值很笨拙,因为它们没有实现特征 Sized
。因此,它们只能通过指针访问。
对于我的应用程序,使用带有生命周期的普通指针不是很有帮助。相反,我想要一个拥有的胖指针,它保证所包含的对象将持续到指针存在的时间(并且不再),但允许持有未知大小的值。
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>
。