这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么

What does it mean in C++ "It does not own the underlying data, and so is cheap to copy or assign"

本文关键字:copy to cheap or is assign 什么 意味着 so not does      更新时间:2023-10-16

我正在阅读有关mutable_buffer的信息,它说

mutable_buffer类提供缓冲区的安全表示形式 可以修改。它不拥有基础数据,因此 复制或分配成本低廉。

通过复制,我认为这意味着使用memcpy复制数据。分配是什么意思?

另外,如果我有一个指向数据的指针,我不能简单地mutable_buffer指向这些数据而不是我的吗?当然,如果两者的大小一致。

如果您查看更多上下文,您会发现 boost 缓冲区是从现有数据聚合(如数组、std::arrays、boost::arrays 或std::vectors(构造的。这些是数据的所有者,这意味着他们负责分配和删除。

相比之下,mutable_buffer类只指向上述容器之一提供的数据,在创建时不获取它,在销毁时不删除它;这就是"它不拥有数据"的意思。

因为它只包含一个指针和一个整数大小,并且不能不关心它指向的数据,所以创建、复制、分配和销毁的成本很低。(但显然必须注意所指向的数据仍然有效 - 这就是例如std::vector的区别,无论您何时何地复制,创建和销毁它,它都会自动处理它。缺点是复制向量会复制所有数据。