powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / надо ли удалять массивы map и queue ?
25 сообщений из 26, страница 1 из 2
надо ли удалять массивы map и queue ?
    #38908274
cpp2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ищу в яндексе, но так ничего и нет.
Если создали объекты map и queue, поработали с ними, то при закрытии программы достаточно для каждого элемента queue вызвать pop, а для map - clear ? И всё ? Утечки памяти не будет ? Никаких там delete [] и прочего не нужно ?
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38908853
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015,
пример использования привёл бы... Как правильно. И как нет - по твоему мнению. А то из вопроса нифига не понятно...
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38908899
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015Если создали объекты map и queue, поработали с ними, то при закрытии программы достаточно для каждого элемента queue вызвать pop, а для map - clear ? И всё ? Утечки памяти не будет ? Никаких там delete [] и прочего не нужно ?


Если ты создавал объекты типа map или queue как динамические переменные (с помошью операции new),
то ты обязан осовободить их вызовом операции delete.
В противном случае не нужно делать для освобождения памяти вообще ничего.

Эти правила относятся к любым объектам в С++, а не только map и queue.

Также нужно отметить, что map и queue (и прочие подобные) сами заботятся о удалении своего содержимого, программист
об этом думать не должен в том смысле, что он может положиться на то, что при уничтожении объекта типа map или queue или vector и т.п. его элементы удаляться без участия программиста.

Также надо предупредить, что при хранении в коллекциях типа map или queue или vector объектов по ссылке (т.е. указателей на
объекты), ответственность за удаление хранимых объектов несёт программист.

Можно запомнить простое мнемоническое правило, которое работает почти всегда.
Если ты создал объект через new -- удали его delete . Если ты не создавал объект, то не тебе его и удалять.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38908921
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основной посыл современного С++ - RAII . Нe используйте "сырые" указатели, если только от них деваться некуда. Умные указатели помогут в большинстве случаев.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38908938
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ключевые слова в исходном сообщении "при закрытии программы" - то есть речь о моменте, когда уже не важно что там выделено, открыто, залочено и т.п., так как об освобождении ресурсов позаботится уже ОС. Какая разница какие там в этот момент утечки, если все вот-вот будет смыто и освобождено?
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38908971
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstКакая разница какие там в этот момент утечки, если все вот-вот будет смыто и освобождено?
Утечки ресурсов конечно не будет при завершении программы.
Но с прикладной точки зрения может требоваться финализировать объект каким-либо образом помимо освобождения ресурсов. Например где-то что-то зарегистрировать, послать событие и т.п.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38908979
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstКлючевые слова в исходном сообщении "при закрытии программы" - то есть речь о моменте, когда уже не важно что там выделено, открыто, залочено и т.п., так как об освобождении ресурсов позаботится уже ОС. Какая разница какие там в этот момент утечки, если все вот-вот будет смыто и освобождено?

Это -- глубоко неверное суждение.
Далеко не во всех операционных системах вся память приложения освобождается после
завершения приложения.
Таже память бывает разная. Зелёная и красная. :-)

Так что надо память освобождать.

К тому же есть и вполне прогматические резоны, чтобы освобождать память.
Если это не делать, то в отладке будет очень трудно найти среди неосвобождённых утечки памяти (то, что должно было быть
выделено и удалено в процессе работы программы). Там просто будет тупо много объектов и не будет видно утечки.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38908997
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и не только в памяти/ресурсах дело. Anatoly Moskovsky верно заметил, не отработают диструкторы, а кто знает, какая в них прошита логика. Вполне может быть и что-то бизнес-критикал.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909013
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevне отработают диструкторы
К счастью, в рассматриваемом случае деструкторы отработают ))
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909060
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015, погугли по ключевым словам memory leaks detection

Погугли также названия конкретных программных тулзов для поиска утечек.
Лучше всего начать с опций твоей среды разработки.

Что будет в твоём конкретном случае - уравнение со множеством неизвестных.
Если это консольная тулза которая работает 1 секунду - то ничо не будет.
Скорее всего. Если это сервис или служба - то зависит от ситуации. Быстрая утечка -
твой корабль затонет быстро.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909087
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДалеко не во всех операционных системах вся память приложения освобождается после
завершения приложения.
Таже память бывает разная. Зелёная и красная. :-)

По поводу сложности отладки настоящих утечек или проблем с бизнес логикой вопросов нет, но вот по этим пунктам:
- в каких именно сколько-нибудь распространенных системах ресурсы завершенного процесса освобождаются не полностью?
- гугл ничего хорошего про red/green memory не показывает, разве что про "энергосберегающую" от самсунга. О чем была речь на самом деле и где про такую память можно почитать?
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909094
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько всего понапридумывали :) Может ТС просто сомневается в рядовых конструкциях, по неопытности, начитавшись умных книжек со страшилками про утечки?
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909254
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- в каких именно сколько-нибудь распространенных системах ресурсы завершенного процесса освобождаются не полностью?


например, в msdos.
или какие нибудь контроллеры со своими ос.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909264
cpp2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TСколько всего понапридумывали :) Может ТС просто сомневается в рядовых конструкциях, по неопытности, начитавшись умных книжек со страшилками про утечки?
именно так. везде сказано, что всё за собой надо убирать, особенно динамические массивы. А в документации по map и queue ничего про это нет, вот и спрашиваю. Но MasterZiv всё доходчиво объяснил.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909343
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015,
так дал бы примеры конструкций, с которыми у тебя сомнения. Может, лучшее решение бы предложили...
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909350
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivнапример, в msdos.
или какие нибудь контроллеры со своими ос.
Те, кто сейчас под них разрабатывают, скорее всего в состоянии рассказать что происходит с их ресурсами даже если их разбудить посреди ночи и точно не спросят ничего подобного (даже если не учитывать не полное соответствие "каких нибудь контроллеров" критерию распространенности как целевой платформы для разработки). Да и память под контейнеры берется из полученного при запуске куска памяти (то есть из куска от начала свободной памяти на момент запуска до сегмента 0A000h), который все равно будет смыт при обычном завершении программы. В разного рода расширенную память контейнеры не полезут, так что и в dos задача избавления от утечек заранее - далеко не самая приоритетная.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909611
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cpp2015именно так. везде сказано, что всё за собой надо убирать, особенно динамические массивы.


Ещё раз хочу обратить внимание на то, что написал BagaBaga .
Если применять современные подходы, то динамических массивов в программе вообще не должно быть .
Везде, где у тебя есть динамический массив, попробуй применять std::vector соответсвующего типа,
и тебе вообще никогда не нужно будет ничего удалять вручную.
Везде, где тебе невозможно или бессмысленно применять std::vector , попробуй применять std::shared_ptr или другие аналогичные классы из стандартного заголовка <memory> .
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909614
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstMasterZivнапример, в msdos.
или какие нибудь контроллеры со своими ос.
Те, кто сейчас под них разрабатывают, скорее всего в состоянии рассказать что происходит с их ресурсами даже если их разбудить посреди ночи и точно не спросят ничего подобного (даже если не учитывать не полное соответствие "каких нибудь контроллеров" критерию распространенности как целевой платформы для разработки). Да и память под контейнеры берется из полученного при запуске куска памяти (то есть из куска от начала свободной памяти на момент запуска до сегмента 0A000h), который все равно будет смыт при обычном завершении программы. В разного рода расширенную память контейнеры не полезут, так что и в dos задача избавления от утечек заранее - далеко не самая приоритетная.


Если ты даш ссылки на пункты ISO стандарта С++ или С, которые дают гарантию того, что это всё будет выполняться в программе на С++ или С, то я тебе тоже поверю.

Ещё раз, в 205, единственный корректный способ управления динамической памятью в программе на С++ -- корректно освобождать
всю выделенную память по окончанию программы.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909639
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕсли ты даш ссылки на пункты ISO стандарта С++ или С, которые дают гарантию того, что это всё будет выполняться в программе на С++ или С, то я тебе тоже поверю.
ИМХУ это в описаниях ОС надо искать, оно должно там быть, иначе как насильно убитая прога освободит задействованные ею ресурсы?
Иначе получается: снял задачу = разгрузил процессор, а все остальное освободится только после перезагрузки.
Другой вопрос насколько качественно освобождение прописано в ОС, при некотором стечении обстоятельств ОС может не освободить, в результате, например в виндовсе, бывают подвисшие открытые файлы, которые открыла убитая (снятием задачи) прога.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909649
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMasterZivЕсли ты даш ссылки на пункты ISO стандарта С++ или С, которые дают гарантию того, что это всё будет выполняться в программе на С++ или С, то я тебе тоже поверю.
ИМХУ это в описаниях ОС надо искать, оно должно там быть, иначе как насильно убитая прога освободит задействованные ею ресурсы?


Я не ищу источник информации, а как бы намекаю на то, что программа на С++/С должна быть написана по соответствию со
стандартами языков, а не так, как это предполагает операционка.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909724
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ не ищу источник информации, а как бы намекаю на то, что программа на С++/С должна быть написана по соответствию со
стандартами языков, а не так, как это предполагает операционка.
Встречное предложение - найди в стандарте С или С++ требование к программе освобождать память.
Это как бы не того уровня документ, чтобы там писать про "освобождайте за собой память", "не пишите по нулевому указателю" (тем более что к тем же контроллерам это не вполне применимо) и т.п.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909730
abcdefg12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В стандарте не знаю (просто ссылку на стандарт не знаю), а в Википедии написано:

https://ru.wikipedia.org/wiki/New_(C )#.D0.9E.D1.81.D0.B2.D0.BE.D0.B1.D0.BE.D0.B6.D0.B4.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B4.D0.B8.D0.BD.D0.B0.D0.BC.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8_.D0.B2.D1.8B.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.BD.D0.BE.D0.B9_.D0.BF.D0.B0.D0.BC.D1.8F.D1.82.D0.B8

"Любая динамическая память выделенная при помощи new должна освобождаться при помощи оператора delete...." )))
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вопрос нужно смотрель болле шИроко.

Кроме памяти в приложении могут быть задействованы глобальные ресурсы ОС
(сокеты/файловые дескрипторы, pipes, объекты синхронизации). Что будет
если мы их не освобождаем? Всегда-ли ребут приложения обязан освободить
этот мусор? Я не знаю.
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909813
q235
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и ресурсы могут быть не только локальными, но и удаленными (по сети). Тут уже локальная ОС ничего сделать не сможет. Обрыв связи, конечно, теоретически, тоже должен детектироваться. Но между теорией и практикой большой разрыв.

Кроме того, кроме закрытия, можно еще говорить о "корректном" закрытие. Если у нас какой нибудь буферизованный ввод/вывод - ресурсы может и освободятся (ОС), но содержимое файла периодически будем получать разрушенным.

Ну и код пишется не на один раз. Если когда нибудь, при копи-пастном методе программирования данный код будет "повторно использован" может оказаться, что момент "перед закрытием приложения" уже таким не будет. И полезут баги. А тот, кто копи-пастил, будет совершенно уверен, что код 100% рабочий, десятилетия работал. Ну или приложение много-процессное, переделать в много-потоковое.

Разбрасывание граблей и обручей от бочек в густой траве... Конечно, если память хорошая и сам разбрасывал, можешь и не наступить.... если повезет
...
Рейтинг: 0 / 0
надо ли удалять массивы map и queue ?
    #38909850
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offА чем опасен обруч от бочки?
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / надо ли удалять массивы map и queue ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]