В показанном коде нет утечки. Во время выполнения все выделенные объекты являются ссылочными. Утечка памяти происходит только в том случае, если объект был выделен и на него нельзя ссылаться каким-либо образом.
Если указатель выходит из области видимости или его значение изменяется без освобождения объекта, это является утечкой памяти. Но пока указатель находится в самой внешней области видимости и ничто другое не меняет его значение, утечки нет.
"В объектно-ориентированном программировании утечка памяти происходит, когда объект хранится в памяти, но не может быть доступен из исполняемого кода." Википедия - «Утечка памяти»
Другие ответы предполагают, что любая программа, которая использует типовые одноэлементные шаблоны или не освобождает все выделенные объекты до завершения, имеет утечку памяти. Это, ИМО, довольно глупо. В любом случае, если вы примете это определение, почти у каждой программы или библиотеки реального мира есть утечка памяти, и утечки памяти, конечно, не все плохи.
В некотором смысле, этот вид кодирования подвержен утечке памяти, потому что легко изменить значение указателя или выпустить его из области видимости. В этом случае есть фактическая утечка. Но, как показано, утечки нет.
У вас может быть другая проблема: если деструктор имеет побочные эффекты, то его отсутствие может привести к некорректной работе. Например, если вы никогда не вызываете деструктор для буферизованного потока вывода, записывающего в файл, последние записи могут никогда не произойти, потому что буфер не был сброшен в файл.