什么时候需要初始化指向 nullptr 的指针?
When do I need to initialize a pointer to nullptr?
当我阅读 Qt 的一些示例代码时,我通常会看到它们初始化一个指向 nullptr
的指针,例如:
QPushButton *startButton = nullptr;
我对nullptr
有一些非常基本的想法,但自从我开始学习C++以来,从来没有真正使用过它。所以我想知道为什么他们会初始化一个指向 nullptr
的指针,而不是像这样:QPushButton *startButton;
,这样做有什么好处,我什么时候需要初始化一个指向 nullptr
的指针?
提前致谢。
When do I need to initialize a pointer to nullptr?
在无法初始化指向对象地址的指针的情况下(可能是因为该对象尚不存在,或者可能只是有条件地存在),但您需要能够检查指针是否确实指向对象与否。
可以知道,指向null的指针肯定不是指向一个已经存在的对象。如果您正确定义程序的 post 条件和不变量,您将能够证明指针总是指向 null 或有效对象。
Null 不是唯一的选择。另一种选择是初始化为始终存在的静态对象。这是基于节点(即基于 link 的)数据结构中的典型解决方案,其中静态对象称为哨兵节点。
你需要在读取之前初始化一个指针。
如果您有时只是在读取它之前将其初始化为一个合理的值,那么在声明时将其初始化为 nullptr
是有意义的,因为那时您将能够检测到 nullptr
作为 "not yet initialized to something reasonable".
如果你的程序中有一个路径可以在初始化之前读取它,那么让指针未初始化是不好的,因为读取一个未初始化的变量是未定义的行为。
当我阅读 Qt 的一些示例代码时,我通常会看到它们初始化一个指向 nullptr
的指针,例如:
QPushButton *startButton = nullptr;
我对nullptr
有一些非常基本的想法,但自从我开始学习C++以来,从来没有真正使用过它。所以我想知道为什么他们会初始化一个指向 nullptr
的指针,而不是像这样:QPushButton *startButton;
,这样做有什么好处,我什么时候需要初始化一个指向 nullptr
的指针?
提前致谢。
When do I need to initialize a pointer to nullptr?
在无法初始化指向对象地址的指针的情况下(可能是因为该对象尚不存在,或者可能只是有条件地存在),但您需要能够检查指针是否确实指向对象与否。
可以知道,指向null的指针肯定不是指向一个已经存在的对象。如果您正确定义程序的 post 条件和不变量,您将能够证明指针总是指向 null 或有效对象。
Null 不是唯一的选择。另一种选择是初始化为始终存在的静态对象。这是基于节点(即基于 link 的)数据结构中的典型解决方案,其中静态对象称为哨兵节点。
你需要在读取之前初始化一个指针。
如果您有时只是在读取它之前将其初始化为一个合理的值,那么在声明时将其初始化为 nullptr
是有意义的,因为那时您将能够检测到 nullptr
作为 "not yet initialized to something reasonable".
如果你的程序中有一个路径可以在初始化之前读取它,那么让指针未初始化是不好的,因为读取一个未初始化的变量是未定义的行为。