我正在做一个涉及许多队列的问题,我很好奇,为了释放一个未使用的队列的内存,清空队列(弹出)就足够了,还是我必须做其他的事情?
尝试使用'free‘,但得到错误。
发布于 2019-06-21 03:52:11
queue只是其他STL容器类型的包装器,默认情况下是std::deque,但也可能是std::list或std::vector。当您的队列超出作用域时,会自动触发底层容器的析构函数。
如果您想手动释放队列消耗的内存,并且您的队列的数据类型是原语(int,float,...)或者有一个适当的析构函数(如果不是全部的话,也是大部分的),你可以在C++11和以后的版本中这样做:
std::queue<your_type>().swap(your_queue);
或者对于较旧的版本:
{
std::queue<your_type> temp;
std::swap(temp, your_queue);
}
它创建一个空队列,将其内容与您的队列交换,然后销毁它(因为它在交换之后立即超出范围),只留下您手中的空队列。
如果您使用的是没有适当析构函数的自定义类型的队列,我认为唯一的方法是一个接一个地弹出元素,并手动释放弹出的元素的内存。
发布于 2019-06-21 04:03:35
弹出应该足够了,因为STL类管理自己的资源,例如
queue <int> g;
g.push(10);
g.push(20);
g.push(30);
while (!g.empty())
{
g.pop();
}
https://stackoverflow.com/questions/56688963
复制相似问题