to_owned() 什么时候不克隆?

When does to_owned() not clone?

docs for to_owned()状态:

Creates owned data from borrowed data, usually by cloning.

但没有说明克隆不会发生的条件。 “通常”含糊不清,出于性能原因,我正在尝试删除 clone() 调用。

有人可以澄清一下吗?

to_owned 方法是 ToOwned 特征的一部分,因此它不能保证实现特征的结构将克隆或不克隆正在调用的实例 to_owned之上。 ToOwned 特性的整体实现确实调用了 clone,并且很少手动实现,这是几乎每次调用 to_owned 都会导致克隆的原因之一。

此外,正如@Sven Marnach 所指出的,任何派生 Clone 的结构都会接收一揽子实现并且无法实现其自己的 ToOwned 实现,这使得对一揽子 imp 的调用更加普遍.

ToOwned

blanket implementation 见下文
impl<T> ToOwned for T
where
    T: Clone,
{
    type Owned = T;
    fn to_owned(&self) -> T {
        self.clone()
    }

    fn clone_into(&self, target: &mut T) {
        target.clone_from(self);
    }
}