从C ++ priority_queue中释放

问题描述 投票:0回答:2

是否可以安全地删除std::priority_queue中的元素并在之后弹出它,或者pop是否尝试使用引用而不是丢弃它?

  while(!priority_queue.empty()){
    delete priority_queue.top();
    priority_queue.pop();
  }
c++ memory-management
2个回答
3
投票

从OP澄清说,队列没有容器任何指针,只是对象:

你根本不必打电话给delete。只需在你的while循环中调用pop()。容器处理释放。


1
投票

所以这个页面很有用:http://www.cplusplus.com/reference/queue/priority_queue/pop/

它说的是队列中的对象被破坏了。

但是,如果对象实际上没有删除其内容的析构函数,那么您必须自己删除内容。但这不是OO编程,它只是懒惰地使用容器。

请注意,假设一对具有正确析构函数的对象将正确调用两个析构函数。

所以一般来说,不,你不应该明确地删除对象,但是你懒得写一个原始指针或指针对的容器,那么你将不得不这样做,因为你不会从析构函数调用中受益。

© www.soinside.com 2019 - 2024. All rights reserved.