![]() |
|
![]() ![]() ![]() |
|
scai |
|
|||
![]() Неофит ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.1.2007 Где: г. Загорск Репутация: нет Всего: 2 |
вопрос в следующем: в некоем "независимом" участке программы обьект больше не нужен, как устроить так, чтобы этот участок смог прознать, не используется этот обьект где еще, нет ли на него указателей(?), чтобы освобождать или не освобождать память?
в java - понятно как, я вот с турбопаскалем морочусь... ![]() --------------------
|
|||
|
||||
Shaggie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: нет Всего: 72 |
По идее реализется это так - в самом объекте есть счетчик. При создании указателя на объект счетчик инкрементируется, указатель перестает указывать на объект - декрементируется. Каждый раз проверяется состояние счетчика, если он равен нулю - объект уничтожается.
Так оно в теории. Желаю удачи! |
|||
|
||||
Ivan Kolesnikov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 9.3.2005 Где: г. Новокузнецк Репутация: нет Всего: 6 |
Не все так просто, данный подход не обнаружет 2 объекта ссылающиеся друг на друга и на них нет ссылок из других блоков программы. --------------------
|
|||
|
||||
Shaggie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: нет Всего: 72 |
Увы, тогда объекту нельзя ссылаться даже на самого себя!
Однако такой подход достаточно просто реализуется и шустро работает, при наличии прямых рук косяков не возникает. |
|||
|
||||
scai |
|
|||
![]() Неофит ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.1.2007 Где: г. Загорск Репутация: нет Всего: 2 |
Понятно: пишем процедуру/метод, который индексирует все счетчики, в случае чего освобождает память, а потом уж присваивает(себе народное добро=).
А с двумя обьектами... это когда один "выписали", а потом другой и остаются они висеть в воздухе... мда. так, что сделать? я подумывал об том, чтоб каждый обьект в спец. список заносить(и дались мне эти списки), в котором к нему все, что на него ссылается, прицеплено и раз в три столетия через прогонять через процедуру очистки. Да, при больших обьемах накладно очень получится... как все таки? это ведь, как я понимаю, общее место для многих программ. п.с. можт знает кто, как джавовский сборщик мусора работает? --------------------
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
достаточно контролировать все создания/удаления/изменения указателей на объекты
с обычными указателями этого не получится, поэтому используют "умные указатели" - объекты, которые в своих конструкторах, деструкторах и изменяющих методах обновляют количество указателей на объект в C++ это реализуется без проблем (если только не начинать брать указатель на умный указатель) в TP я не припоминаю только одного - отслеживания создания нового объекта путём копирования (т.е. конструктор копирования) если он там есть, проблем быть не должно... -------------------- qqq |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 3 Всего: 173 |
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
scai |
|
|||
![]() Неофит ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 20.1.2007 Где: г. Загорск Репутация: нет Всего: 2 |
Думаю, что счетчик в указателе, в любом случае инициализируется через счетчик в объекте, а при изменении значения указателя, счетчик у обьекта найти несложно [только, интерфейс должен быть типа stchetchikable для всех обьектов], почему же тогда он(счетчик) дублируется в указателе?
эта проблема всеж не решается. Или я крупно не понимаю чего-то. --------------------------- [upd] пока писал да думал, пост с чудодейственной ссылкой проглядел. пойду смотреть Это сообщение отредактировал(а) scai - 22.1.2007, 16:48 --------------------
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |