从未初始化的 C++ 指针仍输出为已初始化

c++ pointer never initialized still outputs as initialized

本文关键字:初始化 输出 C++ 指针      更新时间:2023-10-16

我所做的只是声明一个指针,然后检查它是否指向任何东西:

#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 initializedn");
    }
    else
    {
        printf("phead is not initializedn");
    }               
}

};

然后,在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;
}

您不会在构造函数或就地初始化pHeadpTail。因此,当您创建LinkedList对象时,这些成员将具有任意值。因此,要么编写构造函数:

LinkedList()
    :pHead(NULL), pTail(NULL)
{
}

或者,如果您使用的是 c++11,请就地初始化它们:

private:    
    pNode pHead = nullptr;
    pNode pTail = nullptr;