我是否必须为拥有的(易于使用的)和借用的(更有效的)数据结构创建不同的结构?

Do I have to create distinct structs for both owned (easy-to-use) and borrowed (more efficient) data structures?

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

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

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

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

std::borrow::Cow.

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

是否有一种惯用的方法来拥有 Message 的自有变体?出于某种原因,我们有 &strString&[u8]Vec<u8>,...这是否意味着人们通常会选择 &msgMessage?

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

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

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

另请参阅: