从C ++优先级取消分配

时间:2019-03-22 11:31:14

标签: c++ memory-management

删除std::priority_queue中的元素并随后弹出该元素是否安全,或者弹出元素是否会尝试对该引用执行除丢弃该元素以外的任何操作?

  while(!priority_queue.empty()){
    delete priority_queue.top();
    priority_queue.pop();
  }

2 个答案:

答案 0 :(得分:3)

OP澄清说队列不包含任何指针,只是对象:

您根本不必致电delete。仅在您的while循环中调用pop()。容器处理释放。

答案 1 :(得分:1)

因此此页面很有用: http://www.cplusplus.com/reference/queue/priority_queue/pop/

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

但是,如果对象实际上没有删除其内容的析构函数,则必须自己删除该内容。但这不是OO编程,而只是对容器的惰性使用。

请注意,说一对确实具有适当析构函数的对象将正确调用两个析构函数。

因此,通常,不,您不应该显式删除对象,而是懒惰地编写了一个包含原始指针或成对指针的容器,那么您将不得不这样做,因为您不会从析构函数调用中受益。