В общем случае подобная утилита невозможна.
Преимущество (одновременно и недостаток) языков с ручным управлением памятью в том-то и состоит, что выделенная вручную память освобождается не в момент, который может быть вычислен заранее, а при помощи логики программиста. При этом такой подход при вдумчивом и аккуратном программировании может быть эффективнее различных автоматических или полуавтоматических систем управления памятью.
Если бы можно было автоматически вычислить тот самый момент, когда память можно освобождать, не было бы нужды в delete
: компилятор мог бы сам вставить delete
в нужном месте.
Язык C++ пошёл фактически по пути отказа от ручного управления памятью: идиоматическим считается полуавтоматическое освобождение памяти при помощи подсчёта ссылок. (Да-да, тот самый shared_ptr
.) Вы можете попробовать таки настроить ваш генератор вручную, чтобы он выдавал shared_ptr
вместо нативных указателей. Но того самого «правильного» места освобождения памяти автоматически никто за вас не найдёт.
Поэтому те альтернативы, которые вы перечислили (умные указатели и «программист») — по существу единственные доступные. Сожалею об этом.