小编Jam*_*ond的帖子

无法删除指针的向量

我有一个管理器类,它包含一个指向虚拟基类的指针向量,允许在那里存储各种子类.在这个管理器类的析构函数中,我希望它循环遍历它所拥有的所有指针并删除它们.但是,我尝试了许多方法,程序在执行过程中不断崩溃.

我现有的代码如下所示: -

for (std::vector<GameState*>::iterator it = gamestates_.begin(); it != gamestates_.end(); ++it){
    delete *it;
    it = gamestates_.erase(it);
}
Run Code Online (Sandbox Code Playgroud)

我还没有尝试过的一件事是使用unique_ptr,但我确信这应该能够在不使用它们的情况下处理它.如果我错了,请纠正我.

编辑:我知道我应该在循环之后清除向量,但这是我在尝试删除指针的每个常规方法后所得到的.它似乎不喜欢删除命令.

c++ pointers vector delete-operator

3
推荐指数
1
解决办法
1万
查看次数

析构函数在构造函数后立即调用

我正在尝试创建一个Window类,但由于某种原因,一个Window对象的简单定义之后立即调用它的析构函数.

Window类的标题具有以下构造函数和定义的复制控件: -

Window();
Window(int);
Window(const char* title);
Window(string title);
Window(const char* title, int x, int y, int width, int height);
Window(string title, int x, int y, int width, int height);
Window(const Window &window);
Window& operator=(const Window &window);
~Window();
Run Code Online (Sandbox Code Playgroud)

这些功能的相关代码如下: -

Window::Window()
{
  Window(default_title, default_width, default_height, default_xpos, default_ypos);
}

Window::Window(int)
:title_(default_title),
size_({ default_width, default_height }),
position_({ default_xpos, default_ypos })
{
  context_ = glutCreateWindow(title_.c_str());
  setposition(position_);
  setsize(size_);
  glutSetWindow(context_);
}

Window::Window(string title)
:Window(title, default_width, default_height, default_xpos, default_ypos)
{ }

Window::Window(const char* title)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ constructor destructor c++11

0
推荐指数
1
解决办法
1018
查看次数