Почему вы используете ключевое слово delete? - PullRequest
0 голосов
/ 21 июня 2011

Я понимаю, что удаление возвращает память к куче, которая была выделена из кучи, но какой смысл? Компьютеры имеют много памяти, не так ли? И вся память возвращается, как только вы "X" из программы.

Ответы [ 4 ]

3 голосов
/ 21 июня 2011

Пример:

Рассмотрим сервер, который выделяет объект Packet для каждого пакета, который он получает (для примера это плохая схема).Сервер по своей природе предназначен для отключения никогда .Если вы никогда не будете delete тысячи Packet, которые ваш сервер обрабатывает в секунду, ваша система будет перегружена и аварийно завершится через несколько минут.

Другой пример:

Рассмотрим видеоигрукоторый выделяет частицы для специального эффекта, каждый раз, когда создается новый взрыв (и никогда не удаляет их).В такой игре, как Starcraft (или другие недавние), после нескольких минут веселья и разрушения (и сотен тысяч частиц) лаг будет настолько огромным, что ваша игра превратится в слайд-шоу PowerPoint, что фактически сделает вашего игрока несчастным.

2 голосов
/ 21 июня 2011

Не все программы быстро завершаются.

Некоторые приложения могут работать часами, днями или дольше.Демоны могут быть спроектированы так, чтобы бегать без перерыва.Программы могут легко потреблять больше памяти в течение срока службы, чем доступно на машине.

Кроме того, не все программы работают изолированно.Большинству нужно делиться ресурсами с другими приложениями.

1 голос
/ 26 июня 2013

Я вижу вашу точку зрения, на каких компьютерах много памяти, но вы ошибаетесь.Как инженер, вы должны создавать программы, которые правильно используют ресурсы компьютера.

Представьте, вы создали программу, которая работает все время, пока компьютер включен.Иногда он создает некоторые объекты / переменные с «новым».Через некоторое время они вам больше не нужны, и вы их не удаляете.Такая ситуация возникает время от времени, и вы просто делаете немного ОЗУ на складе.Через некоторое время пользователь должен завершить вашу программу и запустить ее снова.Это не так плохо, но не так удобно, более того, ваша программа может загружаться некоторое время.Из-за этого пользователь плохо относится к вашему глупому решению.

Другое дело.Затем вы используете «new» для создания объекта, который вы называете конструктором, и «delete» вызывает деструктор.Допустим, вам нужно открыть, чтобы файл и деструктор закрывали его и делали его доступным для других процессов, в этом случае вы стали бы не только памятью, но и файлами из других процессов.

Если вы не хотите использовать "Удалить "вы можете использовать общие указатели (он имеет сборщик мусора).Его можно найти в STL, std :: shared_ptr, у него есть один недостаток, WIN XP SP 2 и более ранние версии не поддерживают это.Так что если вы хотите создать что-то для публики, вы должны использовать boost, он также имеет boost :: shared_ptr.Чтобы использовать boost, вам нужно скачать его с здесь и настроить свою среду разработки для его использования.

1 голос
/ 21 июня 2011

Существует множество причин, по которым вам следует управлять использованием памяти, а также любых других используемых вами ресурсов компьютера:

  • То, что может начаться с упрощенной программы, может вскоре стать более сложным, в зависимости от ваших областей использования потребление памяти может возрасти в геометрической прогрессии.
  • Помните, что вы делите ресурсы памяти с другими программами. Быть хорошим соседом позволяет другим процессам использовать освободившуюся память и помогает поддерживать стабильность всей системы.
  • Вы не знаете, как долго может работать ваша программа. Некоторые люди переводят сеанс в спящий режим (или никогда не выключают компьютер) и могут поддерживать вашу программу в течение многих лет.

Есть много других причин, я предлагаю исследовать распределение памяти для более подробной информации о том, что можно и чего нельзя делать.

...