如何释放队列(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)占用的内存?的主要内容,如果未能解决你的问题,请参考以下文章