stl容器如何破坏对象

Con*_*ode 5 c++ stl

stl如何调用对象的析构函数,如std :: vector :: erase或std :: vector :: pop_back?

Ste*_*end 6

vector具有分配器与之相关联,所述破坏成员用于清理.

调用对象析构函数而不释放存储对象的内存.

顺便说一句,你可以自己通过源代码来解决这个问题.


Ker*_* SB 4

也许对史蒂夫的好答案有一些补充:

事实上,内部分配是由分配器完成的,分配器有两个不同的目的:分配和释放内存,以及构造和销毁对象。对象总是在 上构建(复制或移动)insert并在 上销毁erase,但是内部有所不同。

基于节点的容器通常会分配并构造一个完整的内部节点,其中包含实际对象簿记数据(如双向链表中的下一个/上一个指针)。当您擦除其中之一时,容器将销毁该对象并释放内存。

像Vector这样的序列容器会严格分开分配和构造;分配的内存量通常只会增长,但是当您擦除时(在调用擦除对象的析构函数之后),必须移动其他元素以维持连续的内存布局。

new/delete如果您以前没有见过,内部分配器的工作可能看起来与您平常的工作有很大不同,但最终总会在某个地方进行构造和破坏。