Вы не можете сделать это так. Nod
выходит за пределы области действия в конце конструктора (последний }
), что означает, что его память недействительна, а это означает, что List_Head
указывает на недопустимую память.
Если вы хотите сохранить память вокруг, вы должны использовать new
, как
List_Head = new Node(num);
Просто убедитесь, что вы delete
new
! Но вы должны быть осторожны с этим! Память может протекать, если вы ее не удаляете, или ее можно удалить дважды, если вы не справитесь с ней правильно. В частности, вам необходимо также реализовать деструктор, конструктор копирования и оператор присваивания, чтобы правильно обрабатывать выделенную память.
В качестве альтернативы вы можете использовать интеллектуальные указатели (например, std::shared_ptr
, если вы используете C++ 11), чтобы обрабатывать удаления для вас, чтобы вы не утечка памяти или двойной памяти удаления. Возможно, вам придется определить свой конструктор копий и оператор присваивания, хотя, в зависимости от того, как вы хотите, чтобы ваш класс действовал (потому что без пользовательских версий вы получите shallow copy объекта, а не deep copy, что может и не быть вы хотите).
Это базовый C++, вы назначаете адрес локальной (то есть временной) переменной.Когда вы выходите из области c'tor, «Nod» удаляется, а также память, указанная «List_Head». – azf