也许对史蒂夫的好答案有一些补充:
事实上,内部分配是由分配器完成的,分配器有两个不同的目的:分配和释放内存,以及构造和销毁对象。对象总是在 上构建(复制或移动)insert
并在 上销毁erase
,但是内部有所不同。
基于节点的容器通常会分配并构造一个完整的内部节点,其中包含实际对象和簿记数据(如双向链表中的下一个/上一个指针)。当您擦除其中之一时,容器将销毁该对象并释放内存。
像Vector这样的序列容器会严格分开分配和构造;分配的内存量通常只会增长,但是当您擦除时(在调用擦除对象的析构函数之后),必须移动其他元素以维持连续的内存布局。
new/delete
如果您以前没有见过,内部分配器的工作可能看起来与您平常的工作有很大不同,但最终总会在某个地方进行构造和破坏。
归档时间: |
|
查看次数: |
434 次 |
最近记录: |