Нужно ли обязательно удалять объекты, созданные new?
От: alex-v  
Дата: 21.08.08 14:00
Оценка: :)
Обязательно ли надо перед закрытием программы удалять объекты из памяти, созданные с помощью new ? Может они сами атоматически удаляются и память высвобождается, а?
С Богом. Александр.
Re: Нужно ли обязательно удалять объекты, созданные new?
От: Сергей Мухин Россия  
Дата: 21.08.08 14:02
Оценка:
Здравствуйте, alex-v, Вы писали:

AV>Обязательно ли надо перед закрытием программы удалять объекты из памяти, созданные с помощью new ? Может они сами атоматически удаляются и память высвобождается, а?


уже обсуждали. ищи

ответ: надо, т.к. завтра твоя программа будет частью большой системы 24x7
---
С уважением,
Сергей Мухин
Re: Нужно ли обязательно удалять объекты, созданные new?
От: alzt  
Дата: 21.08.08 14:09
Оценка:
Здравствуйте, alex-v, Вы писали:

AV>Обязательно ли надо перед закрытием программы удалять объекты из памяти, созданные с помощью new ? Может они сами атоматически удаляются и память высвобождается, а?


Сами они конечно "удалятся" при завершении программы (по крайней мере под Windows), куда же денутся.
Только не вызов деструктора плох не только утечкой памяти, но и утечкой других ресурсов (сокеты например).
В итоге получится очень путанный код — нужно будет помнить какие объекты владеют какими ресурсами, а какие нет.
Re: Нужно ли обязательно удалять объекты, созданные new?
От: _Ursus_  
Дата: 21.08.08 17:54
Оценка: :))
Здравствуйте, alex-v, Вы писали:

AV>Обязательно ли надо перед закрытием программы удалять объекты из памяти, созданные с помощью new ? Может они сами атоматически удаляются и память высвобождается, а?


Ну, мыться тоже совершенно не обязательно. Ученые доказали: когда слой грязи достигает некоторой критической (и притом конечной) величины, он отваливается совершенно самостоятельно, и тело вновь становится чистым!
Re[2]: Нужно ли обязательно удалять объекты, созданные new?
От: alex-v  
Дата: 21.08.08 18:16
Оценка:
_U_>Ну, мыться тоже совершенно не обязательно. Ученые доказали: когда слой грязи достигает некоторой критической (и притом конечной) величины, он отваливается совершенно самостоятельно, и тело вновь становится чистым!

Ценю юмор.
А если серьёзно, есть что по теме сказать?
С Богом. Александр.
Re[3]: Нужно ли обязательно удалять объекты, созданные new?
От: Nuzik Россия  
Дата: 21.08.08 20:03
Оценка:
Здравствуйте, alex-v, Вы писали:

AV>Ценю юмор.

AV>А если серьёзно, есть что по теме сказать?

Уже сказали: http://rsdn.ru/forum/message/3071643.1.aspx
Автор: Сергей Мухин
Дата: 21.08.08
Re[2]: Нужно ли обязательно удалять объекты, созданные new?
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.08.08 02:09
Оценка:
Здравствуйте, alzt, Вы писали:

A>Сами они конечно "удалятся" при завершении программы (по крайней мере под Windows), куда же денутся.

A>Только не вызов деструктора плох не только утечкой памяти, но и утечкой других ресурсов (сокеты например).
A>В итоге получится очень путанный код — нужно будет помнить какие объекты владеют какими ресурсами, а какие нет.

Сокеты тоже удаляются. Вообще, есть не так уж и много объектов, которые система не подчищает за завершившейся программой. В венде я навскидку не назову ни одного, в унихе парочку назову.
Re: Нужно ли обязательно удалять объекты, созданные new?
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.08.08 02:12
Оценка: +1 -1
Здравствуйте, alex-v, Вы писали:

AV>Обязательно ли надо перед закрытием программы удалять объекты из памяти, созданные с помощью new ? Может они сами атоматически удаляются и память высвобождается, а?


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

Однако если это все-таки делать, и кроме того, добавить в программу счетчик зааллоцированных, но не освобожденных объектов, получите встроенную самодиагностику утечек памяти, а это многого стоит.
Re[2]: Нужно ли обязательно удалять объекты, созданные new?
От: Pzz Россия https://github.com/alexpevzner
Дата: 22.08.08 02:14
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>ответ: надо, т.к. завтра твоя программа будет частью большой системы 24x7


Вы упускаете логическую цепочку между бытием большой системы 24x7, и небходимостью удалять объекты перед выходом.
Re[3]: Нужно ли обязательно удалять объекты, созданные new?
От: Сергей Мухин Россия  
Дата: 22.08.08 04:37
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Сергей Мухин, Вы писали:


СМ>>ответ: надо, т.к. завтра твоя программа будет частью большой системы 24x7


Pzz>Вы упускаете логическую цепочку между бытием большой системы 24x7, и небходимостью удалять объекты перед выходом.


Вы упускаете мой текст! Вот он "уже обсуждали. ищи"

Уже было длинное обсуждение в точности на эту тему, Извините, что не привел ВСЕ сообщения. Ищите сами!
---
С уважением,
Сергей Мухин
Re: Нужно ли обязательно удалять объекты, созданные new?
От: Аноним  
Дата: 22.08.08 05:30
Оценка:
Здравствуйте, alex-v, Вы писали:

AV>Обязательно ли надо перед закрытием программы удалять объекты из памяти, созданные с помощью new ? Может они сами атоматически удаляются и память высвобождается, а?


Для практически никому ненужных разовых утилит, которые почти ничего не делают можно и не удалять,
хотя мне лично проще удалять.
В других случаях лики памяти приведут в исчерпанию памяти и тормозам всей системы.

А вообще, переходи на C#.
Если тебе лень думать про время жизни объектов и не хочется этим управлять,
то языки с GC как раз для тебя.
Re: Нужно ли обязательно удалять объекты, созданные new?
От: MasterZiv СССР  
Дата: 22.08.08 06:50
Оценка:
alex-v wrote:

> Обязательно ли надо перед закрытием программы удалять объекты из памяти,

> созданные с помощью new ? Может они сами атоматически удаляются и память
> высвобождается, а?

Тебе чего, лень две лишних строчки написать ?
Напиши, хуже не будет. И вообще, привыкай удалять всю память,
которую выделял.

> Нужно ли обязательно удалять объекты, созданные new?

Нужно.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Нужно ли обязательно удалять объекты, созданные new?
От: MasterZiv СССР  
Дата: 22.08.08 06:52
Оценка: 1 (1) +1 :)
Pzz wrote:

> Не обязательно, система подчистит. Если только деструкторы не делают


ОБЯЗАТЕЛЬНО ! Ты готов поручиться, что все на свете операционки, где
реализован какой-то компилятор С++, освобождают память приложения
при окончании последнего ? Если не готов (а я в этом уверен), то
и нечего было говорить.

Ладно, извините, больше в тему писать не буду, а то опять пойдёт...
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Нужно ли обязательно удалять объекты, созданные new?
От: Аноним  
Дата: 22.08.08 07:14
Оценка: :)
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, alex-v, Вы писали:


AV>>Обязательно ли надо перед закрытием программы удалять объекты из памяти, созданные с помощью new ? Может они сами атоматически удаляются и память высвобождается, а?


Pzz>Не обязательно, система подчистит. Если только деструкторы не делают нечто полезное во внешнем мире, что все-таки делать надо — ну, например, последнюю транзакцию на базе данных закрывают, содержимое файла из памяти на диск выкладывают.


Pzz>Однако если это все-таки делать, и кроме того, добавить в программу счетчик зааллоцированных, но не освобожденных объектов, получите встроенную самодиагностику утечек памяти, а это многого стоит.


Я вот одного не пойму — откуда лики памяти берутся, если система сама всё подчищает?
Re[3]: Нужно ли обязательно удалять объекты, созданные new?
От: alzt  
Дата: 22.08.08 07:18
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, alzt, Вы писали:


A>>Сами они конечно "удалятся" при завершении программы (по крайней мере под Windows), куда же денутся.

A>>Только не вызов деструктора плох не только утечкой памяти, но и утечкой других ресурсов (сокеты например).
A>>В итоге получится очень путанный код — нужно будет помнить какие объекты владеют какими ресурсами, а какие нет.

Pzz>Сокеты тоже удаляются. Вообще, есть не так уж и много объектов, которые система не подчищает за завершившейся программой. В венде я навскидку не назову ни одного, в унихе парочку назову.


Если и сокеты закрываются, то
на вскидку — отправить серверу "goodbuy" по прикладному протоколу.
Без этого гудбай сервер очень обижается.
Ситуация правда достаточно экзотичная.
Re: Нужно ли обязательно удалять объекты, созданные new?
От: alex-v  
Дата: 22.08.08 08:04
Оценка:
Всем спасибо за ответы. Вообщем прихожу к выводу, что лучше удалять самому созданные объекты в «куче». Мне не сложно вставить несколько операторов delete.
С Богом. Александр.
Re: Нужно ли обязательно удалять объекты, созданные new?
От: sokel Россия  
Дата: 22.08.08 08:34
Оценка: -1
Здравствуйте, alex-v, Вы писали:

AV>Обязательно ли надо перед закрытием программы удалять объекты из памяти, созданные с помощью new ? Может они сами атоматически удаляются и память высвобождается, а?


Бывает так что вызов нескольких миллионов деструкторов значительно увеличивает время остановки сервера. Система сделает это быстрее. А для отладки утечек можно освобождать под #ifdef _DEBUG. Как пример — stateless блочный аллокатор — чтобы освободить выделенные блоки нужно хранить их список. Заполнение списка и освобождение памяти можно сделать это под #ifdef _DEBUG, заодно при очистке проверяя на 0 количество отданных объектов.
Re[2]: Нужно ли обязательно удалять объекты, созданные new?
От: Аноним  
Дата: 22.08.08 11:20
Оценка:
Здравствуйте, alex-v, Вы писали:

AV>Всем спасибо за ответы. Вообщем прихожу к выводу, что лучше удалять самому созданные объекты в «куче». Мне не сложно вставить несколько операторов delete.


И открой для себя умные указатели типа boost::shared_ptr
Re[3]: Нужно ли обязательно удалять объекты, созданные new?
От: Аноним  
Дата: 22.08.08 11:21
Оценка:
Здравствуйте, Аноним, Вы писали:

Pzz>>Однако если это все-таки делать, и кроме того, добавить в программу счетчик зааллоцированных, но не освобожденных объектов, получите встроенную самодиагностику утечек памяти, а это многого стоит.

А>Я вот одного не пойму — откуда лики памяти берутся, если система сама всё подчищает?
А как вы нашли лики в закрытой программе?
Re[3]: Нужно ли обязательно удалять объекты, созданные new?
От: MShura  
Дата: 22.08.08 11:56
Оценка:
А>Я вот одного не пойму — откуда лики памяти берутся, если система сама всё подчищает?

Можно простейший пример, показывающий лики памяти на win32?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.