Эта функция подразумевает контракт, в котором вызывающая функция отвечает за удаление выделенного TrieNode
. Утечка памяти происходит только в том случае, если вызывающий объект не соблюдает этот контракт.
Поскольку вы сказали, что этот TrieNode
не удаляется нигде в main
, вероятно, утечка. Если вы не найдете место, где эта структура удалена, есть утечка. Вот почему RAII - такая мощная концепция. Если бы существовал объект Trie
, который содержал все TrieNode
s и отвечал за выделение и удаление узлов, тогда вам вообще не пришлось бы беспокоиться об утечках.
Возложение на вызывающего абонента ответственности за управление выделенные ресурсы опасны. Не делайте этого.
Вы можете возразить, что эта конкретная реализация не обязательно является утечкой, если программа достаточно проста, и все, что она делает, это получает TrieNode
s, что-то с ними делать и затем выйдите. В этом случае память будет освобождена ОС при выходе из программы. Но это аргумент semanti c, и предоставление примера кода, который делает это, является плохой практикой и может привести к тому, что культовые программисты автомобилей сделают это плохой практикой.