![]() |
|
Модераторы: bsa |
![]()
|
|
| makaka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 25.10.2009 Репутация: нет Всего: нет |
программирую в Java - там вообще в принципе нет никаких вопросов по сборке мусора, т.е. ненужных более данных. Это делает автоматический сборщик мусора
Сейчас осваиваю С++. Собственно не понимаю - что автоматически удаляется, а что нет. Облазил уже много книг - не нашел. Как я понимаю примитивные типы (int, float и т.д.) удаляются автоматически из памяти когда заканчивается их область видимости. Их вручную удалять не надо. А вот объект надо удалять вручную когда он перестает быть нужным, даже если программа переходит в ту часть, в которой объект перестает быть видимым (на него не остается ссылок). Правильно? Что тогда писать в деструкторе объекта? Какие поля нужно удалять "вручную" в деструкторе - все или примитивные не надо? Для контейнеров типа vector и map и других объектов из стандартной библиотеки нужно ли вызывать деструкторы после окончания использования??? Если программа (консоль) завершила работу удалит ли Windows автоматически то, что осталось в памяти после работы программы? Какие еще есть особенности, связанные с освобождением памяти? PS Вопросы видимо имеют тривиальный ответ, но в книгах на эту тему максимум 2 стр... А вопрос-то важный |
|||
|
||||
| IKM2007 |
|
||||||||||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
Нет, для них написаны деструкторы, которые вызываются, когда нужно. Да и сам их не сможешь удалить. Да, иначе нельзя, если обьект будет невидимым, как ты его удалишь?
То есть "примитивные", это стандартные типы? Да, стандартные удалять не нужно, если конечно это не указатель. Типа:
Нет, опять таки если обьект не указатель.
Да. -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
||||||||||
|
|||||||||||
| makaka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 25.10.2009 Репутация: нет Всего: нет |
Спасибо!!!!!!
PS Все-таки сборщик мусора жизнь сильно упрощает =)) |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
Это же POD-ы СтОит отметить, что у объектов бывают деструкторы(;)). Так же стОит отметить, что объекты могут создаваться на стэке, и при помощи оператора new Добавлено через 2 минуты и 15 секунд Конструкторы/деструкторы сильно упрощают жизнь, и защищают от ошибок при работе с памятью. Еще правильное проектирование проекта, чтоб минимизировать "ручное" управление памятью. Добавлено через 2 минуты и 44 секунды makaka, Да, и тему закрой. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
-------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
Lazin, зато со сборщиком памяти есть другие проблемы: недетерменированное управление ресурсами (выкрутасы вроде наследования от IDispose), более прожорливая стратегия выделения памяти, чем это необходимо, менее быстрая программа в общем случае .... впрочем, чего я тебе рассказываю ) ты и так "в теме" )
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
можно посмотреть в сторону boost::shared_ptr - если его использовать вместо простых указателей, он реализует "первое приближение" сборщика мусора
-------------------- qqq |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Помойму приведенные ответы только запутали тс, имхо так проще : если вызвали new или new[] вызывайте delete или delete[] соответственно.. за исключением случаев, когда передали право удаления (почитайте в частности про умные указатели) особые случаи (например wx- и qt- объекты без проблем удаляются сами если у них определен родитель) описаны в документации к библиотеке. созданные на стеке или статически удаляются сами, когда придет время деструктор на прямую вызывать не нужно |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
позволь мне не согласиться с тобой, в общем случае(сферический случай в вакууме), GC в целом - быстрее, но зато время выполнения той или иной операции становится непредсказуемым, из-за GC благодаря GC, операция выделения памяти имеет сложность O(1), освобождение памяти - в большинстве случаев то-же дешевая, чем меньше живет объект - тем дешевле, помимо этого, фрагментация меньше, locality лучше(меньше кеш промахов)
Добавлено через 2 минуты и 35 секунд выделение памяти в куче - оч. дорогая операция, а выделение памяти в управляемой сборщиком мусора куче - очень дешевая, сравнимая со стоимостью выделения памяти в стеке |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 5 Всего: 32 |
Типы удаляться не могут, удаляться могут объекты каких-то типов. Явным образом удалять объект, созданный через определение переменной, или временный объект не надо - это забота компилятора. Тип объекта никак не влияет на способ освобождения памяти, отводимой этому объекту изначально (размер которой можно получить через sizeof(T), где T - тип объекта), на это влияет только способ создания объекта. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |