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

jam*_*mes 0 c++

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

queue<int> *myqueue;
myqueue=new queue<int>();
Run Code Online (Sandbox Code Playgroud)

现在在析构函数中我想要销毁它:所以我编写了代码

while(!myqueue->empty())
{
    myqueue->pop();
}
Run Code Online (Sandbox Code Playgroud)

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

sbi*_*sbi 5

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

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

class myclass {
public: 
  // whatever
private: 
  std::queue<int> myqueue_;
};
Run Code Online (Sandbox Code Playgroud)

(注意std::queue,即使队列本身没有动态分配,它也会动态地为其内容分配内存.)

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

  • @james:你完全像我说的那样:`删除myqueue;`.如果在运行时失败,这意味着您做错了并调用_Undefined Behavior_.当新手手动摆弄动态分配的对象时,这很容易出错.这就是为什么我写"我觉得你想要动态创建一个队列". (3认同)