我正在为我的应用程序使用Ogre框架。当应用程序关闭时,我关闭了Ogre,删除了Ogre::Root对象。之后,我需要删除一些指针,因为对于用作接口(interface)的每个Ogre类,我都有自己的类。我只是删除指向我的类(class)的指针。由于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对象动态分配了内存,因此我必须删除释放分配的内存的指针,这是我在析构函数中所做的(至少我想这样做)。

问题是:当我的应用程序关闭时,由于访问冲突,我无法在位置0x00000042处读取而收到一个删除Ogre::OverlaySystem对象的异常。这是失败的示例(对不起,德语,但我现在无法更改):

c++ - 为什么不能删除用new创建的Ogre OverlaySystem?-LMLPHP

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

我现在花了几个小时寻找失败或原因,但找不到任何帮助。如果有人可以帮助我解决这个问题,那将是非常不错的。

最佳答案

发现错误!我以为我已经做到了,但是经过几次更改后一定会有一些混淆。

解:
在调用Ogre::OverlaySystem的析构函数之前,必须先调用Ogre::Root的析构函数。

关于c++ - 为什么不能删除用new创建的Ogre OverlaySystem?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35599149/

10-12 05:48