C++ stl容器如何销毁对象

C++ stl容器如何销毁对象,c++,stl,C++,Stl,stl如何调用对象的析构函数,如std::vector::erase或std::vector::pop_back中的析构函数?向量与之关联,成员用于清理 调用对象析构函数,而不释放 对象已存储 顺便说一句,如果IDE不错,您可以自己通过源代码了解这一点。也许是Steve的好答案的补充: 实际上,内部分配是由分配器完成的,分配器有两个不同的用途:分配和释放内存,以及构造和销毁对象。对象总是(复制或移动)在插入时构造,在擦除时销毁,但是内部会有所不同 基于节点的容器通常会分配和构造一个完整的内部节点

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

向量与之关联,成员用于清理

调用对象析构函数,而不释放 对象已存储


顺便说一句,如果IDE不错,您可以自己通过源代码了解这一点。

也许是Steve的好答案的补充:

实际上,内部分配是由分配器完成的,分配器有两个不同的用途:分配和释放内存,以及构造和销毁对象。对象总是(复制或移动)在
插入时构造,在
擦除时销毁,但是内部会有所不同

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

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


<> P>内部分配程序的工作可能与你平时的代码>新的/删除/代码>工作有很大的不同,如果你以前没有看到过,但是最终总是有一个结构和破坏。

你是指语义(例如顺序),还是C++语法用来做什么?哦,我想我明白了。是这样的吗?只有在STL的情况下,这些函数才是在类中实现的?@PiMaster:是的,这些是分配器的典型工作马函数(但是要注意,一个真正的分配器类必须满足大量的额外需求)。不是很多需求,而是一个非常可怕的关于类型全局性的需求,而不是实例。我应该检查一下C++0x是否真的解决了这个问题。@edA:你还必须定义大量的typedef和臭名昭著的
rebind
机制……我又看了一遍我的代码,是的,我想它是很多:7个typedef,1个愚蠢的rebind,11个函数。