C++指针永远不会初始化还是输出作为初始化
所有我做的是声明指针,然后检查是否它指向什么:C++指针永远不会初始化还是输出作为初始化
#pragma once
#include <Node.h>
#include <stdio.h>
template <class NodeDataType>
class LinkedList
{
typedef Node<NodeDataType>* pNode;
private:
pNode pHead;
pNode pTail;
public:
void Add(NodeDataType* pNodeTypeData)
{
if(pHead)
{
printf("phead is initialized\n");
}
else
{
printf("phead is not initialized\n");
}
}
};
然后,在main()
,我想提出一个新的LinkedList对象,并调用Add
但是当我运行它时,它输出pHead is initialized
? 但我从来没有初始化它?
有人可以解释给我吗?
感谢
(主)
#include <stdio.h>
#include <LinkedList.h>
#include <GameObject.h>
int main(int argc, char** argv)
{
LinkedList<GameObject> meList;
meList.Add(new GameObject());
return 0;
}
你不会在构造函数或代替初始化pHead
或pTail
。因此,当您创建一个LinkedList
对象时,这些成员将具有任意值。所以,要么写构造函数:
LinkedList()
:pHead(NULL), pTail(NULL)
{
}
或者,如果你使用的是C++ 11就地对它们进行初始化:
private:
pNode pHead = nullptr;
pNode pTail = nullptr;
我也会在初始化列表':pHead(nullptr),pTail(nullptr)'中使用'nullptr'。 –
@AndreKampling:如果OP使用C++ 11,是的。 – nakiya
是的,你确定你是对的,但至少使用'NULL'宏会更清晰。但是如果他的编译器不支持它,他也可以提供一个自己的'nullptr'类型[在这里看到](https://stackoverflow.com/a/44517878/8051589)。 –
可以有几件事情错在这里,请张贴代码主要还以便我们可以看到自己的错误 – Curious
看看这个https://stackoverflow.com/questions/1910832/why-arent-pointers-initialized-with-null-by-default –
它是否输出'initialized'或'uninitialized '。因为你永远不会初始化'pHead',而是在'if(pHead)'中检查它。 –