我正在尝试显示这样一个简单的对话框:
if (!aboutDialog)
aboutDialog = new AboutDialog(this);
aboutDialog->exec();
由于某种原因它不起作用(aboutDialog有一些指针虽然没有初始化),但检查if (aboutDialog == 0)
也不起作用。我不想每次都创建实例,但只需要创建一次。我该如何正确检查?
谢谢!
答案 0 :(得分:3)
您需要在某处明确地将aboutDialog初始化为0。可能在该成员所属的类的构造函数中。
(!aboutDialog)
是一个正确的测试。
请考虑以下事项:
#include <iostream>
class Thing {
void *data;
public:
Thing(){}
void print() {
std::cout << data << std::endl;
}
};
int main()
{
Thing t;
t.print();
return 0;
}
尝试编译并多次运行它。有可能每次都会印出不同的东西。为什么?因为data
未初始化。它包含垃圾。与0x1234ABCD或42相比,它有很多机会成为空指针。
要解决此问题,data
需要在某处进行初始化。这里最简单的方法就是在Thing
的构造函数中执行此操作,如下所示:
Thing() : data(0) {}
答案 1 :(得分:0)
我的回答可能不是最好的:)我使用Qt和python,你可以在任何时候“从外部”编写新的属性。如果可能的话,在构造aboutDialog时,我会将一个变量(同样可能不是最佳实践)设置为某个值。然后你可以检查这是否稍后设置。就像状态变量或者其他东西:)