BSTNode* x=n;
не создает новый узел. Он объявляет новый указатель, указывающий на тот же узел. x->set_id(n->get_id());
тогда абсолютно ничего не делает - он читает значение из узла и возвращает его обратно в тот же самый узел, который, конечно, уже имеет это значение.
Более того, после delete n;
, x
становится висящим указателем, указывающим на узел, который уже был удален. Любая попытка использовать x
впоследствии ведет к неопределенному поведению.
Если вы хотите создать новый узел с теми же данными, что и исходный, вы, вероятно, захотите BSTNode* x = new BSTNode(*n);
. Предполагая, что BSTNode
имеет подходящий конструктор копирования.
Однако смысл этого упражнения неясен. Почему вы снова хотите создать новый узел, скопировать данные и удалить оригинал? Это кажется довольно бессмысленным - в конце концов, вы правы, если начинаете, с одного узла, несущего определенные данные. Почему вы не можете просто продолжать использовать оригинальный узел?