是否可以安全地删除std::priority_queue
中的元素并在之后弹出它,或者pop是否尝试使用引用而不是丢弃它?
while(!priority_queue.empty()){
delete priority_queue.top();
priority_queue.pop();
}
从OP澄清说,队列没有容器任何指针,只是对象:
你根本不必打电话给delete
。只需在你的while循环中调用pop()
。容器处理释放。
所以这个页面很有用:http://www.cplusplus.com/reference/queue/priority_queue/pop/
它说的是队列中的对象被破坏了。
但是,如果对象实际上没有删除其内容的析构函数,那么您必须自己删除内容。但这不是OO编程,它只是懒惰地使用容器。
请注意,假设一对具有正确析构函数的对象将正确调用两个析构函数。
所以一般来说,不,你不应该明确地删除对象,但是你懒得写一个原始指针或指针对的容器,那么你将不得不这样做,因为你不会从析构函数调用中受益。