Ого, это очень много для решения.
Самое главное, чтобы быть последовательно усердным и дисциплинированным. Это верно для любого ресурса на любом языке, даже более безопасного языка управления. Люди чувствуют, что когда язык управляет их памятью, им не нужно об этом думать. Но всегда лучше выпустить любые ресурсы как можно быстрее после того, как вы закончите с ними. Я всегда чувствовал, что "Сборка мусора" делает программистов ленивыми в последние годы.
Всякий раз, когда я выделяю память на языке, подобном с ++, я проверяю, что сначала я освобождаю ее перед использованием. Другими словами, я пишу «выделять», «освобождаю» и затем заполняю середину. Важно войти в постоянную привычку. Я думаю, что это необходимый минимум для изучения ... правильного и дисциплинированного управления ресурсами. Это не только память, она должна применяться ко всем ресурсам, включая ссылки на базы данных, ссылки на файлы, дескрипторы контекста и другие подобные животные.
Весь предмет управления памятью в C ++ довольно обширный. Я бы сказал, читать, изучать и кодировать как можно больше.
пример:
char* myusedmemory;
myusedmemory = (char *)malloc(1000); // allocate memory
free(myusedmemory); // immediately deallocate memory
/* go back and fill in the code between */
Существует множество хороших ссылок для получения дополнительных знаний по этому вопросу. Я обнаружил, что изучение учебников на relisoft.com было для меня полезным, хотя основное учебное пособие посвящено Windows. Еще одна хорошая ссылка может быть найдена здесь.
Что касается различий между указателями и ссылками, одним из основных отличий является гибкость. Вы должны определить ссылку немедленно (int iExample; int & refExample = iExample;) Я не думаю, что будет большая разница в производительности. Однако указатели, являющиеся более мощными и более гибкими, будут более опасными и потребуют управления вышеупомянутой дисциплиной.
примеры утечек памяти здесь . но вы можете найти больше, прибегая к помощи «утечки памяти в C ++»
Что касается malloc , free , calloc , realloc , это просто функции, как и любые другие команды, в этих В особых случаях функции включены в stdlib. Вы просто должны понимать, что они делают и как их использовать, как и в случае с любыми другими функциями, как и обычная функция printf ().
как примечание: Умные указатели - это очень хороший способ и, как правило, более безопасный.
В качестве еще одной заметки я хотел бы упомянуть, Code Complete , лучшая книга, которую я читал по теме управления ресурсами. Я читал обложку, чтобы покрыть много-много раз.