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