Рассмотрим следующую функцию, которая удаляет узел из двоичного дерева поиска, если у узла нет дочерних элементов:
void erase_no_children(node* todel)
{
//...
if (todel->parent->left == todel) //if todel is left child
todel->parent->left = nullptr;
if (todel->parent->right == todel) //if todel is right child
todel->parent->right = nullptr;
delete todel;
}
Поскольку todel->parent->left == todel
это означает, что, устанавливая todel->parent->left
на nullptr
, я точно так же устанавливаю todel
на nullptr
. Компилятор вообще не жалуется.
Вопрос. Безопасно ли это? Это течет? Или это неопределенное поведение?
todel
наnullptr
. - person Barmar   schedule 08.12.2015todel->parent->left
не меняет значениеtodel
. - person Galik   schedule 08.12.2015