РЕДАКТИРОВАТЬ: Чтобы ответить на вопрос, заданный в заголовке, но не в тексте: самый безопасный способ - НЕ повторно реализовать дерево.Используйте стандартный библиотечный ассоциативный контейнер или, возможно, увеличьте BGL.
Вы можете использовать ссылочный класс-оболочку в контейнерах (и boost::optional
, содержащий такую обертку для родительской ссылки, если это необходимо), но я не уверенэто решение вашей основной проблемы.Класс tree_node
не управляет памятью, поэтому нет особого риска удаления.
Далее, вам действительно нужно N-арное дерево?Не могли бы вы обойтись без std::map
или одного из других ассоциативных контейнеров и избежать кодирования множества ошибок?
Очевидно, что открытый API вашего дерева не должен обеспечивать прямой доступ к классу узла (см. map
и его использование итераторов), поэтому, пока дерево правильно управляет памятью, ваши заботы об управлении указателями должны быть минимальными, поскольку вы полностью контролируете все управление узлами.