如何销毁在堆上创建的stl队列?

时间:2010-08-31 09:08:50

标签: c++

根据要求,我必须在堆上创建stl队列 我已经在我的类的构造函数中创建了stl队列,如下面的代码

queue<int> *myqueue;
myqueue=new queue<int>();

现在在析构函数中我想破坏它: 所以我写了代码

while(!myqueue->empty())
{
    myqueue->pop();
}

请告诉我是否正确的方法来销毁它或者还有其他任何意思可以避免内存泄漏。请注意 删除myqueue会给出分段错误。

1 个答案:

答案 0 :(得分:5)

所有STL容器都有一个成员clear(),可用于删除其内容。所有STL容器都会在析构函数中调用此成员,因此您不必手动执行此操作。所以你要做的就是确保队列本身被销毁。动态(使用new)分配的对象,通过调用deletedelete myqueue;来完成。

那说:我觉得你想要动态创建一个队列,而不是让它成为一个普通的类成员:

class myclass {
public: 
  // whatever
private: 
  std::queue<int> myqueue_;
};

(注意std::queue将始终动态为其内容分配内存,即使队列本身未动态分配。)

如果您必须动态创建队列,请确保遵循Rule of Three。您描述的崩溃是当您使用没有复制构造函数/赋值运算符的动态分配对象复制类时可能发生的崩溃。