如何释放队列(STL)占用的内存?

Posted

技术标签:

【中文标题】如何释放队列(STL)占用的内存?【英文标题】:How to free the memory occupied by a queue(STL)? 【发布时间】:2019-06-20 15:09:31 【问题描述】:

我正在研究一个涉及大量队列的问题,并且很好奇为了释放未使用队列的内存,是清空队列(弹出)足够还是我必须做其他事情?

尝试使用 'free' ,但出现错误。

【问题讨论】:

【参考方案1】:

std::queue 只是其他 STL 容器类型的包装器,默认情况下是 std::deque,但也可能是 std::list 或 std::vector。当您的队列超出范围时,会自动触发底层容器的析构函数。

如果您想手动释放队列消耗的内存,并且队列的数据类型是原始数据类型(int、float、...)或具有适当的析构函数(如果不是全部,也是大多数 STL 数据类型) ,您可以在 C++11 及更高版本中执行:

std::queue<your_type>().swap(your_queue);

或者对于旧版本:


    std::queue<your_type> temp;
    std::swap(temp, your_queue);

它创建一个空队列,将其内容与您的队列交换,然后销毁它(因为它在交换后立即超出范围),只留下您手中的空队列。

如果您使用的自定义类型的队列没有适当的析构函数,我认为唯一的方法是逐个弹出元素并手动释放弹出元素的内存。

【讨论】:

【参考方案2】:

Be careful with pointers.

弹出应该足够了,因为 STL 类管理自己的资源,例如

queue <int> g;

g.push(10); 
g.push(20); 
g.push(30); 

while (!g.empty()) 
  
    g.pop(); 
 

Reference from GeeksforGeeks

【讨论】:

以上是关于如何释放队列(STL)占用的内存?的主要内容,如果未能解决你的问题,请参考以下文章

共享内存占用不释放

buff/cache占用太多内存,如何释放内存?

如何释放Python占用的内存

正确释放Vector等STL的内存

如何释放Python占用的内存

sql 2008 R2 怎样 释放内存