В первом случае вы объявляете переменную-указатель.Во втором случае вы объявляете переменную-указатель и инициализируете ее NULL
.Любая переменная, которая объявлена, но не инициализирована, приводит к неопределенному поведению при попытке доступа к переменной.Это не имеет ничего общего с указателями, указатели, как и любая другая переменная.Например, если вы напишите int a;
, а затем cout << a;
, вы увидите, что в a
, скорее всего, записано случайное целочисленное значение.Но если вы напишите int a = 0;
, а затем cout << a;
, вы увидите, что a
всегда равно 0 на любом компиляторе на любой машине.Это хорошо определенное поведение, а не неопределенное поведение.
Я бы не рекомендовал использовать необработанные указатели в вашем случае, так как вы, скорее всего, хотите, чтобы они всегда были инициализированы как nullptr
, плюс ваш listNode, скорее всего, наиболее вероятен."принадлежит" самому списку.Попробуйте вместо этого использовать std::unique_ptr<listNode>
: он по умолчанию инициализирует указатель на nullptr
и освободит выделенную память, когда указатель выйдет из области видимости, что означает, что если заголовок списка будет удален, все остальные узлы всписок также будет автоматически удален.