QT中的非初始化指针

时间:2014-01-16 19:04:59

标签: c++ qt pointers

在QT中,我遵循在头文件中编写接口的方式,然后在.cpp文件中执行。在我的例子中,我有一个MainApplication和两个Dialogs作为MainApplication的子项

所以在MainApplication Header中,两个未初始化的指针指向两个对话框

 MemberForm *memberForm;
AboutForm *aboutUsForm;

据我所知,指针将为Null,并且以下条件的计算结果为true

memberForm == NULL //False
aboutUsForm == NULL //False

据我所知,所有未初始化的指针都是NULL指针,所以这对我来说很奇怪。是什么让删除标题中的一个指针更加奇怪,条件评估为真

 MemberForm *memberForm;
//AboutForm *aboutUsForm; // Removing the pointer

条件评估为真

memberForm == NULL //True 

我感谢任何回应。 PS:如果你要发表评论,请留下评论解释原因......

1 个答案:

答案 0 :(得分:0)

堆分配对象的原始(“裸”)指针成员未在C和C ++中初始化。它们的值是未定义的,在第一次初始化之前不能依赖它们。无论你有什么价值,你都是巧合,而不是设计。

通常,在C ++中分配到堆上的对象的原始指针是一种在脚中射击自己的可靠方法,并且通常是糟糕设计的标志。将C的不安全方面拖入C ++确实没有意义。你有C ++的力量,用它来帮助自己。

智能指针(如QScopedPointer)具有更健全的行为,您应该使用它。

  1. 您可以检查它是否已初始化。

  2. 您无需担心删除指向的值。当智能指针被破坏时,它将被自动删除 - 当编译器生成的析构函数代码运行带有智能指针的类时。