当我阅读一些Qt示例代码时,通常会看到它们初始化指向nullptr
的指针,例如:
QPushButton *startButton = nullptr;
我对nullptr
有一些非常基本的概念,但自从我开始学习C++以来,它从未真正使用过一次。因此,我想知道他们为什么要初始化指向nullptr
的指针,而不是这样做:QPushButton *startButton;
,这样做有什么好处,以及何时需要初始化指向nullptr
的指针?
提前谢谢。
发布于 2017-12-25 13:34:36
在读取指针之前,需要初始化它。
如果有时只在读取值之前将其初始化为合理的值,那么在声明时将其初始化为nullptr
是有意义的,因为这时您将能够检测到“尚未初始化到合理的东西”的nullptr
。
如果程序中有一条路径可以在初始化之前读取指针,则保留未初始化的指针是没有好处的,因为读取未初始化的变量是未定义的行为。
发布于 2017-12-25 13:34:35
何时需要初始化指向nullptr的指针?
在无法初始化指向对象地址的指针的情况下(可能是因为该对象还不存在,或者可能只存在于有条件的情况下),但您需要能够检查指针是否指向对象。
您可以知道,指向null的指针绝对不会指向现有的对象。如果正确定义程序的后置条件和不变量,则可以证明指针总是指向null或有效对象。
Null不是唯一的选项。另一个选项是初始化到始终存在的静态对象。在基于节点(即基于链接的)数据结构中,这是典型的解决方案,其中静态对象被称为哨兵节点。
https://stackoverflow.com/questions/47969071
复制相似问题