的文档clone_from
说:
从源执行复制分配。
a.clone_from(&b)
a = b.clone()
在功能上等效,但是可以重写以重用a的资源,以避免不必要的分配。
为什么clone_from
(复制分配)避免不必要的分配?有什么例子?
我认为这是C ++中众所周知的概念,但是我没有强大的C ++背景。
让我们举个例子两个向量a
和b
。每个向量都必须分配一个内部缓冲区来存储元素。
这是每种情况发生的情况:
a = b.clone()
始终执行b.clone()
,这将创建一个具有其自己缓冲区的全新向量,然后a = brand_new_vector
扔掉a
缓冲区并从中窃取brand_new_vector
。a.clone_from(&b)
:如果a
的缓冲区太小,它将分配足够大的缓冲区,但是如果a
的缓冲区已经足够大,它将b
直接将每个元素复制到a
的缓冲区。在后一种情况下,a
的缓冲区被回收,并且避免了内存分配。