gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:25:59 25 4
gpt4 key购买 nike

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

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com