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