c++释放priority_queue中的内存
c++ freeing memory in priority_queue
我有一个
priority_queue<node*, std::vector<node*>, CompareNodes> heap;
假设该节点包括:
class node {
public:
int value;
int key;
int order = 1000000;
};
处理完优先级队列后,如何释放内存?我的方法似乎不起作用:
while (heap.top()) {
node * t = heap.top();
heap.pop();
delete t;
}
看起来你会想做一些更像这样的事情:
while (!heap.empty())
{ /* the rest ... */ }
如果堆为空,.top()
将抛出一个异常,因为没有什么可返回的,这将在弹出元素时发生。
此外,如果可用,您应该使用
priority_queue<std::unique_ptr<node>, std::vector<std::unique_ptr<node>>, CompareNodes> heap;
所以你不必担心自己清除记忆。
就像大多数std::容器一样,内存可能会在您想要的时候释放,也可能不会释放。内存通常会保留更长的时间,这样当您执行heap.push或等效操作时,就不需要再次分配内存了。
想想std::vector,它每次增长时都必须为整个向量分配一组新的内存(向量数据在内存中必须是连续的)。std::vector执行一次大的分配并保留内存更有效,这样增长操作就不会影响性能——a)分配足够大的新空间,b)将现有向量的全部内容复制到新向量空间,c)删除旧向量空间。
最重要的是,你不能强迫它为单个项目释放内存。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 销毁 std::queue 会导致内存错误
- 使用std容器(如vector、list、queue等)的稳定内存地址
- C++ 模板功能<queue>中的内存故障
- 共享内存中的boost::lockfree::queue出现问题(boost1.53,gcc4.7.2/clang3.0
- 为什么 std::queue 在弹出元素后不缩小内存?
- c++ vector或Queue来构建内存和速度方面的大Q