stl容器如何破坏对象

时间:2011-07-15 00:04:14

标签: c++ stl

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

2 个答案:

答案 0 :(得分:6)

vectorallocator相关联,destroy成员用于清理。

  

调用对象析构函数而不释放内存所在的内存   对象被存储。

顺便提一下,你可以自己通过源代码来实现这个,只要体面的IDE。

答案 1 :(得分:4)

对史蒂夫的好回答可能还有一些补充:

实际上,内部分配是由分配器完成的,分配器有两个不同的目的:分配和释放内存,构建和销毁对象。对象始终(复制或移动)在insert上构建并在erase上销毁,但内部变化。

基于节点的容器通常会分配和构建一个完整的内部节点,它包含实际的对象簿记数据(比如下一个/上一个指针) - 链接列表)。当你擦除其中一个时,容器会破坏对象并释放内存。

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

如果您之前没有看到内部分配器工作,那么它可能看起来与您通常的new/delete工作完全不同,但最终总会出现构造和破坏。