Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Ищу в яндексе, но так ничего и нет. Если создали объекты map и queue, поработали с ними, то при закрытии программы достаточно для каждого элемента queue вызвать pop, а для map - clear ? И всё ? Утечки памяти не будет ? Никаких там delete [] и прочего не нужно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 13:15 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
cpp2015, пример использования привёл бы... Как правильно. И как нет - по твоему мнению. А то из вопроса нифига не понятно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 17:30 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
cpp2015Если создали объекты map и queue, поработали с ними, то при закрытии программы достаточно для каждого элемента queue вызвать pop, а для map - clear ? И всё ? Утечки памяти не будет ? Никаких там delete [] и прочего не нужно ? Если ты создавал объекты типа map или queue как динамические переменные (с помошью операции new), то ты обязан осовободить их вызовом операции delete. В противном случае не нужно делать для освобождения памяти вообще ничего. Эти правила относятся к любым объектам в С++, а не только map и queue. Также нужно отметить, что map и queue (и прочие подобные) сами заботятся о удалении своего содержимого, программист об этом думать не должен в том смысле, что он может положиться на то, что при уничтожении объекта типа map или queue или vector и т.п. его элементы удаляться без участия программиста. Также надо предупредить, что при хранении в коллекциях типа map или queue или vector объектов по ссылке (т.е. указателей на объекты), ответственность за удаление хранимых объектов несёт программист. Можно запомнить простое мнемоническое правило, которое работает почти всегда. Если ты создал объект через new -- удали его delete . Если ты не создавал объект, то не тебе его и удалять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 17:59 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Основной посыл современного С++ - RAII . Нe используйте "сырые" указатели, если только от них деваться некуда. Умные указатели помогут в большинстве случаев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 18:16 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Ключевые слова в исходном сообщении "при закрытии программы" - то есть речь о моменте, когда уже не важно что там выделено, открыто, залочено и т.п., так как об освобождении ресурсов позаботится уже ОС. Какая разница какие там в этот момент утечки, если все вот-вот будет смыто и освобождено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 18:36 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
wstКакая разница какие там в этот момент утечки, если все вот-вот будет смыто и освобождено? Утечки ресурсов конечно не будет при завершении программы. Но с прикладной точки зрения может требоваться финализировать объект каким-либо образом помимо освобождения ресурсов. Например где-то что-то зарегистрировать, послать событие и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 19:15 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
wstКлючевые слова в исходном сообщении "при закрытии программы" - то есть речь о моменте, когда уже не важно что там выделено, открыто, залочено и т.п., так как об освобождении ресурсов позаботится уже ОС. Какая разница какие там в этот момент утечки, если все вот-вот будет смыто и освобождено? Это -- глубоко неверное суждение. Далеко не во всех операционных системах вся память приложения освобождается после завершения приложения. Таже память бывает разная. Зелёная и красная. :-) Так что надо память освобождать. К тому же есть и вполне прогматические резоны, чтобы освобождать память. Если это не делать, то в отладке будет очень трудно найти среди неосвобождённых утечки памяти (то, что должно было быть выделено и удалено в процессе работы программы). Там просто будет тупо много объектов и не будет видно утечки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 19:33 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Да и не только в памяти/ресурсах дело. Anatoly Moskovsky верно заметил, не отработают диструкторы, а кто знает, какая в них прошита логика. Вполне может быть и что-то бизнес-критикал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 19:44 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevне отработают диструкторы К счастью, в рассматриваемом случае деструкторы отработают )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 19:58 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
cpp2015, погугли по ключевым словам memory leaks detection Погугли также названия конкретных программных тулзов для поиска утечек. Лучше всего начать с опций твоей среды разработки. Что будет в твоём конкретном случае - уравнение со множеством неизвестных. Если это консольная тулза которая работает 1 секунду - то ничо не будет. Скорее всего. Если это сервис или служба - то зависит от ситуации. Быстрая утечка - твой корабль затонет быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 20:47 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
MasterZivДалеко не во всех операционных системах вся память приложения освобождается после завершения приложения. Таже память бывает разная. Зелёная и красная. :-) По поводу сложности отладки настоящих утечек или проблем с бизнес логикой вопросов нет, но вот по этим пунктам: - в каких именно сколько-нибудь распространенных системах ресурсы завершенного процесса освобождаются не полностью? - гугл ничего хорошего про red/green memory не показывает, разве что про "энергосберегающую" от самсунга. О чем была речь на самом деле и где про такую память можно почитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 21:23 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Сколько всего понапридумывали :) Может ТС просто сомневается в рядовых конструкциях, по неопытности, начитавшись умных книжек со страшилками про утечки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 21:33 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
- в каких именно сколько-нибудь распространенных системах ресурсы завершенного процесса освобождаются не полностью? например, в msdos. или какие нибудь контроллеры со своими ос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 05:22 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Dima TСколько всего понапридумывали :) Может ТС просто сомневается в рядовых конструкциях, по неопытности, начитавшись умных книжек со страшилками про утечки? именно так. везде сказано, что всё за собой надо убирать, особенно динамические массивы. А в документации по map и queue ничего про это нет, вот и спрашиваю. Но MasterZiv всё доходчиво объяснил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 06:20 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
cpp2015, так дал бы примеры конструкций, с которыми у тебя сомнения. Может, лучшее решение бы предложили... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 09:15 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
MasterZivнапример, в msdos. или какие нибудь контроллеры со своими ос. Те, кто сейчас под них разрабатывают, скорее всего в состоянии рассказать что происходит с их ресурсами даже если их разбудить посреди ночи и точно не спросят ничего подобного (даже если не учитывать не полное соответствие "каких нибудь контроллеров" критерию распространенности как целевой платформы для разработки). Да и память под контейнеры берется из полученного при запуске куска памяти (то есть из куска от начала свободной памяти на момент запуска до сегмента 0A000h), который все равно будет смыт при обычном завершении программы. В разного рода расширенную память контейнеры не полезут, так что и в dos задача избавления от утечек заранее - далеко не самая приоритетная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 09:21 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
cpp2015именно так. везде сказано, что всё за собой надо убирать, особенно динамические массивы. Ещё раз хочу обратить внимание на то, что написал BagaBaga . Если применять современные подходы, то динамических массивов в программе вообще не должно быть . Везде, где у тебя есть динамический массив, попробуй применять std::vector соответсвующего типа, и тебе вообще никогда не нужно будет ничего удалять вручную. Везде, где тебе невозможно или бессмысленно применять std::vector , попробуй применять std::shared_ptr или другие аналогичные классы из стандартного заголовка <memory> . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 11:58 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
wstMasterZivнапример, в msdos. или какие нибудь контроллеры со своими ос. Те, кто сейчас под них разрабатывают, скорее всего в состоянии рассказать что происходит с их ресурсами даже если их разбудить посреди ночи и точно не спросят ничего подобного (даже если не учитывать не полное соответствие "каких нибудь контроллеров" критерию распространенности как целевой платформы для разработки). Да и память под контейнеры берется из полученного при запуске куска памяти (то есть из куска от начала свободной памяти на момент запуска до сегмента 0A000h), который все равно будет смыт при обычном завершении программы. В разного рода расширенную память контейнеры не полезут, так что и в dos задача избавления от утечек заранее - далеко не самая приоритетная. Если ты даш ссылки на пункты ISO стандарта С++ или С, которые дают гарантию того, что это всё будет выполняться в программе на С++ или С, то я тебе тоже поверю. Ещё раз, в 205, единственный корректный способ управления динамической памятью в программе на С++ -- корректно освобождать всю выделенную память по окончанию программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 12:02 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
MasterZivЕсли ты даш ссылки на пункты ISO стандарта С++ или С, которые дают гарантию того, что это всё будет выполняться в программе на С++ или С, то я тебе тоже поверю. ИМХУ это в описаниях ОС надо искать, оно должно там быть, иначе как насильно убитая прога освободит задействованные ею ресурсы? Иначе получается: снял задачу = разгрузил процессор, а все остальное освободится только после перезагрузки. Другой вопрос насколько качественно освобождение прописано в ОС, при некотором стечении обстоятельств ОС может не освободить, в результате, например в виндовсе, бывают подвисшие открытые файлы, которые открыла убитая (снятием задачи) прога. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 12:14 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivЕсли ты даш ссылки на пункты ISO стандарта С++ или С, которые дают гарантию того, что это всё будет выполняться в программе на С++ или С, то я тебе тоже поверю. ИМХУ это в описаниях ОС надо искать, оно должно там быть, иначе как насильно убитая прога освободит задействованные ею ресурсы? Я не ищу источник информации, а как бы намекаю на то, что программа на С++/С должна быть написана по соответствию со стандартами языков, а не так, как это предполагает операционка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 12:17 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
MasterZivЯ не ищу источник информации, а как бы намекаю на то, что программа на С++/С должна быть написана по соответствию со стандартами языков, а не так, как это предполагает операционка. Встречное предложение - найди в стандарте С или С++ требование к программе освобождать память. Это как бы не того уровня документ, чтобы там писать про "освобождайте за собой память", "не пишите по нулевому указателю" (тем более что к тем же контроллерам это не вполне применимо) и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 12:55 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
В стандарте не знаю (просто ссылку на стандарт не знаю), а в Википедии написано: 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...." ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 12:58 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
На вопрос нужно смотрель болле шИроко. Кроме памяти в приложении могут быть задействованы глобальные ресурсы ОС (сокеты/файловые дескрипторы, pipes, объекты синхронизации). Что будет если мы их не освобождаем? Всегда-ли ребут приложения обязан освободить этот мусор? Я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 13:10 |
|
||
|
надо ли удалять массивы map и queue ?
|
|||
|---|---|---|---|
|
#18+
Ну и ресурсы могут быть не только локальными, но и удаленными (по сети). Тут уже локальная ОС ничего сделать не сможет. Обрыв связи, конечно, теоретически, тоже должен детектироваться. Но между теорией и практикой большой разрыв. Кроме того, кроме закрытия, можно еще говорить о "корректном" закрытие. Если у нас какой нибудь буферизованный ввод/вывод - ресурсы может и освободятся (ОС), но содержимое файла периодически будем получать разрушенным. Ну и код пишется не на один раз. Если когда нибудь, при копи-пастном методе программирования данный код будет "повторно использован" может оказаться, что момент "перед закрытием приложения" уже таким не будет. И полезут баги. А тот, кто копи-пастил, будет совершенно уверен, что код 100% рабочий, десятилетия работал. Ну или приложение много-процессное, переделать в много-потоковое. Разбрасывание граблей и обручей от бочек в густой траве... Конечно, если память хорошая и сам разбрасывал, можешь и не наступить.... если повезет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2015, 13:44 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=49&tid=2019057]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 154ms |

| 0 / 0 |
