c++ - QT中的非初始化指针

标签 c++ qt pointers

在 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/

    相关文章:

    c++ - Clang 错误地删除死代码

    c++ - std::this_thread::sleep_for sleep 时间过长

    c++ - 我可以在要用 Qt Linguist 翻译的字符串中使用 "\n"字符吗

    c++ - 通过对象名称获取父控件

    c++ - 如何在运行时为虚函数获取指针的确切类型?

    c++ - 在 Linux 中使用 gps timestamp_t 结构设置系统时间

    c++ - 在一行中将 int 写入 std::ofstream::write()

    javascript - Qt编程: How to extend Javascript API in webkit

    c++ - 当我将它添加到指针时,我可以安全地忽略溢出检查的最小偏移量是多少?

    c - 将预分配的 char* 缓冲区传递给 c 函数