【发布时间】:2015-06-05 16:29:03
【问题描述】:
这个问题与 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 的析构函数会自动获取调用并删除按钮。
MainMenu.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 类的析构函数感到困惑。如果您认为我错了,请告诉我。
【问题讨论】:
-
因为你没有
deletemainText析构函数根本不会被调用。实际上,由于mainText是Initilization函数内部的一个局部变量,如果你不将指针保存在其他地方以便delete它会发生内存泄漏。 -
如果您不想调用 delete,您应该使用 std::unique_ptr 或其他智能指针之一。永远记住 RAII。
-
你真的不应该有一个名为
Destroy().的方法,所有这些都应该在析构函数中,人们希望在其中找到它,并且不能意外调用它。 -
@HaukeS 这应该是目前所有这些问题的公认答案。
标签: c++ destructor