Memory management 如何释放队列(STL)占用的内存?
我正在研究一个涉及大量队列的问题,我很好奇,为了释放未使用队列的内存,清空队列(弹出)是否足够,还是我必须做其他事情Memory management 如何释放队列(STL)占用的内存?,memory-management,queue,Memory Management,Queue,我正在研究一个涉及大量队列的问题,我很好奇,为了释放未使用队列的内存,清空队列(弹出)是否足够,还是我必须做其他事情 尝试使用“free”,但出现错误。std::queue只是其他STL容器类型的包装器,默认情况下是std::deque,也可能是std::list或std::vector。当队列超出范围时,将自动触发底层容器的析构函数 如果要手动释放队列占用的内存,并且队列的数据类型为基元(int、float等)或具有适当的析构函数(大多数(如果不是所有)STL数据类型),则可以在C++11及更
尝试使用“free”,但出现错误。std::queue只是其他STL容器类型的包装器,默认情况下是std::deque,也可能是std::list或std::vector。当队列超出范围时,将自动触发底层容器的析构函数 如果要手动释放队列占用的内存,并且队列的数据类型为基元(int、float等)或具有适当的析构函数(大多数(如果不是所有)STL数据类型),则可以在C++11及更高版本中执行以下操作:
std::queue().swap(您的_队列);
或对于旧版本:
{
std::queue<your_type> temp;
std::swap(temp, your_queue);
}
{
std::队列温度;
std::swap(临时,您的_队列);
}
它生成一个空队列,将其内容与您的队列交换,然后销毁它(因为它在交换之后立即超出范围),只留下您手中的空队列
如果您使用的是没有适当析构函数的自定义类型的队列,我认为唯一的方法是逐个弹出元素并手动释放弹出元素的内存。std::queue只是其他STL容器类型的包装器,默认情况下是std::deque,也可能是std::list或std::vector。当队列超出范围时,将自动触发底层容器的析构函数 如果要手动释放队列占用的内存,并且队列的数据类型为基元(int、float等)或具有适当的析构函数(大多数(如果不是所有)STL数据类型),则可以在C++11及更高版本中执行以下操作:
std::queue().swap(您的_队列);
或对于旧版本:
{
std::queue<your_type> temp;
std::swap(temp, your_queue);
}
{
std::队列温度;
std::swap(临时,您的_队列);
}
它生成一个空队列,将其内容与您的队列交换,然后销毁它(因为它在交换之后立即超出范围),只留下您手中的空队列
如果您使用的是没有适当析构函数的自定义类型的队列,我认为唯一的方法是逐个弹出元素并手动释放弹出元素的内存。
弹出应该足够了,因为STL类管理自己的资源,例如
queue <int> g;
g.push(10);
g.push(20);
g.push(30);
while (!g.empty())
{
g.pop();
}
队列g;
g、 推(10);
g、 推(20);
g、 推(30);
而(!g.empty())
{
g、 pop();
}
弹出应该足够了,因为STL类管理自己的资源,例如
queue <int> g;
g.push(10);
g.push(20);
g.push(30);
while (!g.empty())
{
g.pop();
}
队列g;
g、 推(10);
g、 推(20);
g、 推(30);
而(!g.empty())
{
g、 pop();
}