我正在处理一个涉及许多队列的问题,并且很好奇,为了释放未使用的队列的内存,是否正在清空队列(弹出)足够多,还是我必须做其他事情?
尝试使用“免费”,但出现错误。
答案 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)
随着STL类管理自己的资源,例如,
queue <int> g;
g.push(10);
g.push(20);
g.push(30);
while (!g.empty())
{
g.pop();
}