首页 > 解决方案 > 我是否必须为拥有(易于使用)和借用(更高效)的数据结构创建不同的结构?

问题描述

我有一个在一个主要是短暂的缓冲区Message<'a>上的引用。这些引用要求特定的程序流程,因为它们保证永远不会超过缓冲区的生命周期。&'a str'a

现在我还想要一个拥有的版本Message,这样它就可以移动,通过线程发送等。

有没有一种惯用的方法来实现这一目标?我认为这Cow<'a, str>可能会有所帮助,但不幸的是,Cow它不会神奇地分配,以防&'a str缓冲区的生命周期更长。

AFAIKCow并不特殊,因为无论是否Cow持有Owned变体,它仍然必须通过借用检查器'a

的定义std::borrow::Cow

pub enum Cow<'a, B> {
    Borrowed(&'a B),
    Owned(<B as ToOwned>::Owned),
}

有没有一种惯用的方式来拥有一个拥有的变体Message?出于某种原因,我们有&strand String, &[u8]and Vec<u8>, ...这是否意味着人们通常会选择&msgand Message

我想我仍然需要考虑是否真的需要自有变体,但我的经验表明,为自有变体设置逃生舱通常会提高原型制作速度。

标签: rustborrowingowned-types

解决方案


是的,您需要有多种类型,一种代表拥有的概念,一种代表借用的概念。

您将在整个标准库和第三方 crate 中看到相同的技术。

也可以看看:


推荐阅读