为什么我不能删除使用new创建的Ogre OverlaySystem?

时间:2016-02-24 10:12:37

标签: c++ pointers access-violation ogre

我正在为我的应用程序使用Ogre框架。当应用程序关闭时,我关闭Ogre删除Ogre :: Root对象。之后我需要删除一些指针,因为我为每个用作接口的Ogre类都有自己的类。我只是删除了我的类的指针。存在于Ogre元素中的指针不会被删除,因为Ogre关闭会处理它(或者至少它应该根据文档)。

问题在于OverlaySystem类。这是头文件:

class OverlaySystem {
public:
    OverlaySystem();
    Ogre::OverlaySystem* getOverlaySystem() const;
    ~OverlaySystem();

private:
    Ogre::OverlaySystem* overlaySystem;
};

这是源文件:

OverlaySystem::OverlaySystem() :
overlaySystem(new Ogre::OverlaySystem()) {
}

Ogre::OverlaySystem* OverlaySystem::getOverlaySystem() const {
    return this->overlaySystem;
}

OverlaySystem::~OverlaySystem() {
    delete this->overlaySystem;
}

我的理解如下:因为我为Ogre :: OverlaySystem对象动态分配内存,我必须删除释放已分配内存的指针,这是我在析构函数中所做的(或者至少我以为我会这样做)。

问题是:当我的应用程序关闭时,我得到一个异常删除Ogre :: OverlaySystem对象,因为访问冲突说我无法读取位置0x00000042。这是一个失败的例子(对德国人很抱歉,但我现在无法改变):

Access Violation Exception

唯一的地址更改是异常地址本身,这是第一个。

我花了几个小时来寻找我的失败或原因,但我无法找到任何帮助。如果有人可以帮助我解决这个问题,真的很棒。

1 个答案:

答案 0 :(得分:0)

发现错误!我以为我已经这样做了,但经过几次修改后必定会有所混淆。

解决方案: 必须在调用Ogre::OverlaySystem的析构函数之前调用Ogre::Root的析构函数。