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

时间:2019-06-20 15:09:31

标签: memory-management queue

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

尝试使用“免费”,但出现错误。

2 个答案:

答案 0 :(得分:0)

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);
}

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

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

答案 1 :(得分:0)

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