Так не работает. После того, как вы сдвинули назад свой k2, который указывает на некоторую память, которую вы выделили, вы сохранили ее в векторе. Таким образом, у вас есть указатель, указывающий на область памяти, которая имеет 10 в нем. После присвоения k3 k2, вы только изменили переменную-указатель, чтобы указывать на другую ячейку памяти, в которой есть 100. После этого вы даже не удалите k2, вы потеряли указатель на эту память. Это называется утечкой памяти.
Вместо этого вы можете изменить указатель, который вы сохранили в своем векторе. Таким образом, у вас все еще есть доступ к вашим старым данным. Я также не рекомендую перезаписывать этот указатель. Вы не получите доступ к памяти, выделенной для ваших данных.
struct Node
{
Node()
{
visited_print = false;
visited_find = false;
}
bool visited_print;
bool visited_find;
int value;
std::vector<Node*> children;
Node *parent;
};
int main(){
Node *k1 = new Node();
Node *k2 = new Node();
k2->value = 10;
Node *k3 = new Node();
k3->value = 100;
k1->children.push_back(k2);
//k2 = k3;
delete k2;
k1->children[0] = k3;
}