【问题标题】:When do I need to initialize a pointer to nullptr?什么时候需要初始化指向 nullptr 的指针?
【发布时间】:2017-12-25 13:27:06
【问题描述】:

当我阅读一些Qt的示例代码时,我通常会看到他们初始化了一个指向nullptr的指针,例如:

QPushButton *startButton = nullptr;

我对@9​​87654323@ 有一些非常基本的想法,但自从我开始学习 C++ 以来,我从未真正使用过它。所以我想知道为什么他们会初始化指向nullptr 的指针,而不是像这样:QPushButton *startButton;,这样做有什么好处,我什么时候需要初始化指向nullptr 的指针?

提前致谢。

【问题讨论】:

  • 使用未初始化的变量是UB。最好在声明它们时初始化它们。 (然后您可以测试nullptr)。
  • OT:你还需要指向按钮的指针吗?在我 9 年以上的 Qt 开发工作中,我发现在 Qt 的大部分时间里,由于信号和插槽,您不需要指针。如果在极少数情况下您需要指针,您可以在其父级上使用 findChildren()。

标签: c++ qt pointers nullptr


【解决方案1】:

您需要在读取指针之前对其进行初始化。

如果您只是有时在读取之前将其初始化为合理的值,那么在声明时将其初始化为 nullptr 是有意义的,因为那时您将能够将 nullptr 检测为“尚未初始化为合理的东西”。

如果您的程序中有一个路径可以在初始化之前读取它,那么离开指针未初始化是不好的,因为读取未初始化的变量是未定义的行为。

【讨论】:

    【解决方案2】:

    什么时候需要初始化指向 nullptr 的指针?

    在您无法初始化指向对象地址的指针的情况下(可能是因为该对象尚不存在,或者可能只是有条件地存在),但您需要能够检查指针是否确实指向反对与否。

    你可以知道指向 null 的指针肯定不会指向现有对象。如果您正确定义程序的后置条件和不变量,您将能够证明指针始终指向 null 或有效对象。

    Null 不是唯一的选择。另一种选择是初始化为始终存在的静态对象。这是基于节点(即基于链接)的数据结构中的典型解决方案,其中该静态对象称为哨兵节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 2012-08-23
      • 2011-09-29
      相关资源
      最近更新 更多