为什么我不能删除用new创建的Ogre OverlaySystem?
Why can't I delete the Ogre OverlaySystem created with new?
我正在为我的应用程序使用 Ogre 框架。当应用程序关闭时,我关闭 Ogre 并删除 Ogre::Root 对象。之后我需要删除一些指针,因为我有自己的 classes 用于我用作接口的每个 Ogre class。我只是删除了指向我的 classes 的指针。存在于 Ogre 元素的指针不会被删除,因为 Ogre 关闭会处理它(或者至少应该根据文档)。
问题出在 OverlaySystem class 中。这是头文件:
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 读取。这是一个失败的例子(对不起德语,但我现在不能改变):
唯一改变的地址是异常地址本身,这是第一个。
我现在花了几个小时来寻找我的失败或失败的原因,但我找不到任何帮助。如果有人能帮我解决这个问题就太好了。
发现错误!我以为我已经这样做了,但经过几次更改后一定有一些混淆。
解决方法:
Ogre::OverlaySystem
的析构函数必须在调用 Ogre::Root
的析构函数之前调用。
我正在为我的应用程序使用 Ogre 框架。当应用程序关闭时,我关闭 Ogre 并删除 Ogre::Root 对象。之后我需要删除一些指针,因为我有自己的 classes 用于我用作接口的每个 Ogre class。我只是删除了指向我的 classes 的指针。存在于 Ogre 元素的指针不会被删除,因为 Ogre 关闭会处理它(或者至少应该根据文档)。
问题出在 OverlaySystem class 中。这是头文件:
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 读取。这是一个失败的例子(对不起德语,但我现在不能改变):
唯一改变的地址是异常地址本身,这是第一个。
我现在花了几个小时来寻找我的失败或失败的原因,但我找不到任何帮助。如果有人能帮我解决这个问题就太好了。
发现错误!我以为我已经这样做了,但经过几次更改后一定有一些混淆。
解决方法:
Ogre::OverlaySystem
的析构函数必须在调用 Ogre::Root
的析构函数之前调用。