作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
clone_from
的文档说:
Performs copy-assignment from source.
a.clone_from(&b)
is equivalent toa = b.clone()
in functionality, but can be overridden to reuse the resources of a to avoid unnecessary allocations.
为什么 clone_from
(复制赋值)避免不必要的分配?什么是例子?
我认为这是 C++ 中众所周知的概念,但我没有很强的 C++ 背景。
最佳答案
让我们以两个向量 a
和 b
为例。每个向量都必须分配一个内部缓冲区来存储元素。
以下是每种情况下发生的情况:
a = b.clone()
总是执行 b.clone()
,这会创建一个带有自己缓冲区的全新向量,然后 a = brand_new_vector
丢弃 a
的缓冲区并从 brand_new_vector
窃取缓冲区。a.clone_from(&b)
:如果a
的buffer太小,它会分配一个足够大的buffer,但是如果a
> 的缓冲区已经足够大,它会将每个元素从 b
直接复制到 a
的缓冲区。在后一种情况下,a
的缓冲区被回收,避免了内存分配。关于rust - Clone::clone_from 如何避免不必要的分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56464300/
clone_from 的文档说: Performs copy-assignment from source. a.clone_from(&b) is equivalent to a = b.clone
我是一名优秀的程序员,十分优秀!