初始化指向对象的指针
Initialize a pointer to an object
给定一个对象,例如listNode。
如果我用初始化指向对象的指针
listNode* head_node;
这和有什么不同
listNode* head_node = NULL;
在第一种情况listNode* head_node;
中,编译器将分配一些内存来保存指针。该内存可以包含任何值(例如,它可能是该位置用于其他位置时的某个随机值),事实上,读取它将导致未定义的行为。
在第二种情况listNode* head_node = NULL;
中,编译器将分配一些内存来保存指针,然后将NULL
写入该位置,从而保证指针为NULL
。
需要注意的一点是,应该使用nullptr
,而不是NULL
。请参阅此答案了解原因。
在第一种情况下,您要声明一个指针变量。在第二种情况下,您将声明一个指针变量并将其初始化为NULL
。当您尝试访问变量时,任何已声明但未初始化的变量都会导致未定义的行为。这与指针无关,指针和其他变量一样。例如,如果你先写int a;
,然后再写cout << a;
,你会发现a
很可能写了一个随机整数值。但如果你写int a = 0;
,然后又写cout << a;
,你会看到a
在任何机器上的任何编译器上总是0。这是定义良好的行为,而不是未定义的行为。
我不建议在您的情况下使用原始指针,因为您很可能希望始终将它们初始化为nullptr
,而且您的listNode很可能由列表本身"拥有"。尝试使用std::unique_ptr<listNode>
:默认情况下,它会初始化指向nullptr
的指针,并在指针超出范围时释放分配的内存,这意味着如果删除列表的头部,列表中的所有其他节点也会自动删除。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它