我正在使用一个基于文本的小游戏,如果用户通过以下代码行选择了该选项,我的功能基本上会结束游戏:
void MainMenu::Exit()
{
std::exit(0);
}
这很好,但是调用MainMenu析构函数,它包含对使用new关键字创建的指针的删除调用(因此我认为我需要在退出程序之前手动删除对象)。该对象是我的世界级,在用户选择播放时创建。但是,用户可以在创建世界指针之前退出主菜单,因此编译器不知道指针指向的位置。我尝试更改析构函数以查看world对象是否为NULL,如下所示:
MainMenu::~MainMenu()
{
if(world != NULL)
delete world;
}
但我仍然会弹出一个窗口,告诉我程序已经停止响应,我需要手动终止它。
基本上我的问题是,有没有办法判断一个指针是否实际指向某个东西?我甚至需要手动处理删除指针吗?
答案 0 :(得分:0)
是的,在C ++中,您必须确保每个'new'都与'delete'匹配。你应该在MainMenu ctor中确保你正在将world初始化为NULL(或者如果你的编译器支持它,最好是nullptr):
MainMenu::MainMenu (/* more stuff here */) : world (nullptr)
{
// more stuff here
}
此外,正如克里斯指出的那样,删除时不必测试NULL:
MainMenu::~MainMenu()
{
delete world; // no-op if world is null
}
不知道为什么你的程序挂起了。如果你没有将'world'初始化为null,那么它似乎应该是错误的。
答案 1 :(得分:0)
您必须在类的构造函数中初始化指针。可以在不检查指针是否等于NULL的情况下编写析构函数。
MainMenu::~MainMenu()
{
delete world;
}
使用标准智能指针(例如std::unique_ptr