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

问题描述 投票:0回答:2

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

QPushButton *startButton = nullptr;

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

c++ qt pointers nullptr
2个回答
3
投票

您需要在读取之前初始化指针。

如果你有时只在读取它之前将它初始化为一个合理的值,那么在声明点将其初始化为nullptr是有道理的,因为那时你将能够检测到nullptr“尚未初始化为合理的东西”。

如果程序中有一条路径可以在初始化之前读取它,那么将指针保持为未初始化是不好的,因为读取未初始化的变量是Undefined Behavior。


2
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.