![]() |
Модераторы: 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. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |