c ++指针永远不会初始化仍然输出为初始化

时间:2017-06-15 08:21:46

标签: 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;
}

1 个答案:

答案 0 :(得分:1)

您不会在构造函数中或在原位初始化pHeadpTail。因此,在创建LinkedList对象时,这些成员将具有任意值。所以,要么写下构造函数:

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

如果您使用的是c ++ 11,则可以就地初始化它们:

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