to_owned() 什么时候不克隆?
When does to_owned() not clone?
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);
}
}
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
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);
}
}