繁体   English   中英

C ++中的容器数据类型(字符串,向量等)何时/如何释放其动态分配的内存?

[英]When/How do container data types (string, vector, etc.) in C++ free their dynamically allocated memory?

由于容器数据类型具有动态大小,因此我假设它们在堆上分配内存。 但是何时/如何释放分配的内存?

当它们超出范围时(如果容器是在堆栈中创建的),或者当您在容器上显式调用delete时(对于基于堆的容器),它们将被释放。 发生这种情况时,将自动调用容器的析构函数,然后释放为该容器分配的堆内存(包含数据)。

简单地删除容器中的元素并不一定会立即释放内存,因为STL容器通常使用缓存来加快处理速度。 请记住,新/删除操作的成本相对较高。

当销毁它们时,它们释放析构函数中的内存。 (如果容器本身是堆分配的,则可以通过调用deletedelete []来销毁它们;如果是堆栈分配的,则可以通过超出作用域来销毁它们)

简短答案:从其中删除元素时。

通常,当您从容器中移除元素达到其先前的增长阈值时会发生这种情况。 这是一个实现细节,但是通常例如向量创建一个N T的内部数组。

当您插入N个以上的T时,向量将重新分配其内存并增长到N的某个倍数(再次-实现细节)以存储新元素,移除也会发生同样的情况-从向量中移除元素时,收缩会在任何时候收缩达到N的前一个倍数...直到最后只得到N的一个倍数;如果清除并缩小为N,则返回0

当向量对象被破坏时,堆内存(节点存储)也会被删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM