在 QT 中,我遵循在头文件中编写接口(interface)的方式,然后在 .cpp 文件中实现。在我的情况下,我有一个 MainApplication 和两个对话框作为 MainApplication 的子项
所以在 MainApplication Header 中,两个未初始化的指向两个 Dialogs 的指针
MemberForm *memberForm;
AboutForm *aboutUsForm;
据我所知,指针将为 Null,以下条件的计算结果为 true
memberForm == NULL //False
aboutUsForm == NULL //False
据我所知,所有未初始化的指针都是 NULL 指针,所以这对我来说很奇怪。是什么让删除 header 中的一个指针更奇怪的是,条件评估为真
MemberForm *memberForm;
//AboutForm *aboutUsForm; // Removing the pointer
条件评估为真
memberForm == NULL //True
我很感激任何回应。
PS:如果你要对帖子投反对票,请留下评论解释原因..
最佳答案
堆分配对象的原始(“裸”)指针成员未在 C 或 C++ 中初始化。它们的值是未定义的,在第一次初始化之前不能依赖。无论你有什么值(value),都是巧合,而不是设计。
通常,指向在 C++ 中分配在堆上的对象的原始指针无疑是一种自取其辱的方式,并且通常是糟糕设计的标志。将 C 的不安全方面拖到 C++ 中确实没有意义。你拥有 C++ 的力量,用它来帮助自己。
智能指针,如 QScopedPointer
,具有更理智的行为,您应该改用它。
关于c++ - QT中的非初始化指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21170605/