Сначала давайте получим несколько определений.
- Указатель - числовое значение индекса в памяти.
- Стек - область памяти, которая отвечает за хранение значенийлокальные переменные
- Куча - область памяти, которая отвечает за хранение долгосрочных данных.
- Компилятор - Программа, которая переводит код с языка программирования в 1 и 0, понятные компьютеру
Node *head;
Для этого выделяется место в стеке для указателя.Обратите внимание, что выделено только пространство для указателя, а не место для данных.Теперь Node
это тип.Это говорит компилятору, какие данные находятся в этом месте.Он также сообщает компилятору, как взаимодействовать с данными.
Node *head = new Node();
Это выделяет место для указателя в стеке.Затем он выделяет пространство в куче и возвращает адрес (индекс) для хранения в пространстве в стеке.Помните, что данные в стеке исчезают после возврата функции, поэтому, если вы не вызовете delete
, чтобы избавиться от данных в куче или передать ссылку, когда функция вернется, у вас не будет доступа к данным илиудали это;это называется утечкой памяти.
Node head;
Это объявление, однако, выделяет место для всех данных для объекта Node в стеке.Основное различие между этим и распределением кучи (один пример выше) состоит в том, что эта переменная является МЕСТНОЙ.Т.е. он исчезнет после возврата текущей функции.