这个问题与 C++ 游戏引擎有关,称为 AppGameKit (AGK)。
我已经为 Text 创建了一个单独的类,这样我就不必在创建 Text 时调用 AGK 函数。这是简单的类:
Text.h
class Text
{
private: int _ID;
void Destory();
public:
void AddText();
Text(int ID);
~Text();
};
Text::Destroy()
{
agk::DeleteText(_ID);
}
Text::~Text()
{
Text::Destroy();
}
现在我的问题是,当我在任何其他类中调用此类时,比如 MainMenu,我是否必须删除我使用此类创建的类 MainMenu 中的按钮,或者 Text 的析构函数将自动获取调用并删除按钮。
主菜单.cpp
MainMenu::Initilization()
{
Text * mainText = new Text(1);
}
MainMenu::Destory()
{
agk::DeleteText(1); // DO I HAVE TO DO THIS?
}
MainMenu::~MainMenu()
{
MainMenu::Destory();
}
调用AGK函数delete来删除文本,从而释放内存。类似于 C++ delete 关键字。
就我个人而言,我认为删除 MainMenu 类中的按钮应该是不必要的,但我对是否调用了 Text 类的析构函数感到困惑。如果您认为我错了,请告诉我。
最佳答案
每个 new
都必须与delete
平衡,否则您将 泄漏内存。 (您可以使用像 std::unique_ptr
这样的类,它会为您管理删除,但它们仍然会在后台调用 delete
)。
目前,mainText
在 Initilization
函数结束时超出范围,因此您丢失了成功 delete
所需的指针>.
关于c++ - 即使在析构函数之后,我是否必须手动删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30660662/