Я вважаю, що відповідь «ні», ніколи не дозволяйте просочуватися пам’яті, і у мене є кілька причин, яких я не бачив прямо вказаних. Тут є чудові технічні відповіді, але я думаю, що реальна відповідь залежить від соціальних / людських причин.
(По-перше, зауважте, що, як згадували інші, справжня витік - це коли ваша програма в будь-який момент втрачає відстежувані ресурси пам'яті, які вона виділила. У C це відбувається, коли ви перейдете malloc()
на покажчик і нехай цей покажчик покине область, не роблячиfree()
перший.)
Тут важлива суть вашого рішення.Коли ви кодуєте мовою, яка використовує покажчики, ви збираєтесь багато вказувати . І вказівники небезпечні; вони найпростіший спосіб додати всілякі серйозні проблеми до вашого коду.
Коли ви кодуєте, іноді ви збираєтеся бути на кулі, а іноді ви будете втомлюватися, божевільні або переживаєте. У ті дещо розгублені часи ви кодуєте більше на автопілоті.Ефект автопілоту не відрізняється між одноразовим кодом та модулем у більшому проекті. У той час звички, які ви встановлюєте, - це те, що виявиться у вашій кодовій базі.
Тож ні, ніколи не допускайте витоку пам’яті з тієї ж причини, що ви все-таки повинні перевіряти сліпі плями при зміні смуг руху, навіть якщо ви єдиний автомобіль на дорозі на даний момент. У часи, коли ваш активний мозок відволікається, хороші звички - це все, що може врятувати вас від згубних помилок.
Поза проблемою "звички" вказівники є складними і часто потребують великої кількості мозку для розумового відстеження. Найкраще не «каламутити воду», коли справа стосується використання ваших покажчиків, особливо коли ви новачок у програмуванні.
Є і більш соціальний аспект. При правильному використанні malloc()
та free()
, будь-хто, хто перегляне ваш код, буде легко; Ви керуєте своїми ресурсами. Якщо цього не зробити, вони негайно запідозрять проблему.
Можливо, ви зрозуміли, що протікання пам'яті нічого не зашкодить у цьому контексті, але кожному технічному обслуговувачу вашого коду доведеться це робити і в голові, коли він читає цей фрагмент коду. Використовуючи, free()
ви знімаєте потребу навіть розглянути проблему.
Нарешті, програмування - це написання ментальної моделі процесу на однозначну мову, щоб людина та комп'ютер могли чудово зрозуміти зазначений процес. Важливою складовою належної практики програмування ніколи не є введення зайвої неоднозначності.
Розумне програмування є гнучким та загальним. Погане програмування неоднозначне.