Я делаю (что-то вроде) это:
void insert(Node*& node, string val, Node* parent)
{
if (node == NULL)
instantiateNode(node, val, parent);
else
insert(node->child, val, node);
}
Дело в том, что instantiateNode(..., parent)
, кажется, изменяет исходный *&node
, переданный в функцию при установке *parent
. instantiateNode()
- это , предполагается , чтобы изменить node
, но если он изменит parent
, тогда у вас есть узел, для которого установлен родитель, что не имеет смысла, а также Работа. На всех.
Причина, по которой я вообще беспокоюсь о ссылках на указатели, заключается в том, что это исключает особые случаи и значительно сокращает количество проверок ошибок, которые мне приходится делать. Так как я делаю это для уменьшения количества строк и тривиального дублирования алгоритма, я могу обойти это, приблизительно удвоив количество строк кода. Но я бы предпочел этого не делать, и я чувствую, что должен быть способом разыменования ссылки на указатель, чтобы получить новый указатель, указывающий на тот же объект. И действительно, я думал, что проход от *&node
до *parent
должен был это сделать, но, очевидно, gcc оптимизирует его.