Есть ли утилита для автоисправления delete в C++?

Рейтинг: 0Ответов: 1Опубликовано: 27.12.2014

Есть много сгенерированного кода c++ без использования оператора delete. Нужна утилита для автоматического исправления этого, которая бы записывала delete в нужные места.
Не надо советовать всякие "умные указатели" и "сборщики мусора" и говорить типа: "Утилита для исправления программы = программист".

Ответы

▲ 3

В общем случае подобная утилита невозможна.

Преимущество (одновременно и недостаток) языков с ручным управлением памятью в том-то и состоит, что выделенная вручную память освобождается не в момент, который может быть вычислен заранее, а при помощи логики программиста. При этом такой подход при вдумчивом и аккуратном программировании может быть эффективнее различных автоматических или полуавтоматических систем управления памятью.

Если бы можно было автоматически вычислить тот самый момент, когда память можно освобождать, не было бы нужды в delete: компилятор мог бы сам вставить delete в нужном месте.

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

Поэтому те альтернативы, которые вы перечислили (умные указатели и «программист») — по существу единственные доступные. Сожалею об этом.