![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Локальный сборщик мусора. Подчищает "хвосты" во время саморазрушения. Безопасен при исключениях. Покритикуйте пожалуйста, только без грубостей, я нежный...
![]() 30.06.2009. Переписал. Интерфейс немного изменился.
Это сообщение отредактировал(а) Леопольд - 30.6.2009, 23:28 -------------------- вопросов больше чем ответов |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Пример использования:
Добавлено @ 20:18 очень конструктивно... Это сообщение отредактировал(а) Леопольд - 30.6.2009, 23:14 -------------------- вопросов больше чем ответов |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Прошу прощения. Это не о коде! Это реакция о том, что я процитировал. Опять же, прошу прощения за оффтоп. Мое почтение! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Блаженно улыбаюсь ![]() -------------------- вопросов больше чем ответов |
|||
|
||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
неудобно использовать. коллектор надо создавать. потом вызывать его метод. передавать аргументы в шаблон... нельзя оформить это в виде шаблонной функции со статическим хранилищем? |
||||
|
|||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Если не создавать, то как разрушать автоматически, например, при порождении исключения? Это сообщение отредактировал(а) Леопольд - 29.6.2009, 20:53 -------------------- вопросов больше чем ответов |
|||
|
||||
zim22 |
|
||||||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
никак. деструктор вызывается автоматически. хотя можно и явно его вызвать ![]() вы хотели расширить auto_ptr, чтобы он мог корректно работать с массивами? имхо, лучше отдельный класс написать тогда:
здесь Страуструп объясняет, почему не нужен auto_array
*** я попробовал с помощью функций реализовать, но не получилось ![]() т.к. я объекты храню как указатели на void*, а при удалении необходимо void* преобразовать к типу...
Это сообщение отредактировал(а) zim22 - 29.6.2009, 21:36 |
||||||||
|
|||||||||
ЗапаснойЛеопольд |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 29.6.2009 Репутация: нет Всего: нет |
Неа, мне было интересно сделать примитивный сборщик мусора для объектов произвольного типа и размерности, который, при этом правильно их уничтожает. auto_array не предназначен для этого. Моя штуковина намного гибче ![]() пример:
По какой-то причине я не могу постить под моим основным аккаунтом на форуме до завтрашнего вечера. Я что-то нарушил? Это сообщение отредактировал(а) ЗапаснойЛеопольд - 29.6.2009, 22:39 |
||||
|
|||||
ЗапаснойЛеопольд |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 29.6.2009 Репутация: нет Всего: нет |
В шаблоне передается шаблон ![]() Так как это локальный сборщик мусора. То проще всего хранить его как объект. Можно, например, хранить как объект класса, в приватной части, для автоуборки при разрушении класса. Можно усовершенстовть так, чтобы контейнер тоже задавался в виде шаблонного параметра. У меня не получилось сделать с аргументом шаблона по умолчанию, STL контейнеры имеют свои шаблонные параметры по умолчанию, а я не помню как это побороть.
Это сообщение отредактировал(а) ЗапаснойЛеопольд - 29.6.2009, 22:37 |
||||
|
|||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
ЗапаснойЛеопольд, Классный ник!
![]() -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
можно передавать в качестве шаблонного параметра структуру, внутри которой будет шаблон
только я не очень понимаю, чем этот класс лучше обычного scoped_ptr? |
||||
|
|||||
ЗапаснойЛеопольд |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 29.6.2009 Репутация: нет Всего: нет |
Сам придумал!!! ![]() Добавлено @ 23:04
Ничем. Даже хуже из-за необходимости держать всё в одном контейнере. Причём всегда с виртуальным деструктором. Просто интересная головоломка... Хотя, если scoped_ptr не позволяет задавать кустарную очистку памяти (в чём я сомневаюсь)... но мне сейчас поздно лезть в boost.org , спать пора...
Но ведь красиво! ![]() Добавлено @ 23:09 Не понял. Чем это удобнее чем man.push<garbage::del_array>(new int[10])? ![]() Это сообщение отредактировал(а) ЗапаснойЛеопольд - 29.6.2009, 23:26 |
||||||
|
|||||||
DrHex |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
Зачем вообще collector? Деструктор не годится?(collector только добовляет накладные ресурсы)
--------------------
google.com и это все. |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ты же попросил пример ![]() вообще, вариант, который я предложил применяется в boost.mpl, лучше он тем, что обычные шаблонные параметры проще использовать, расширяемость лучше итд... можно еще использовать идиому traits
в этом случае тебе не нужно будет явно указывать garbage::del_array для каждого вызова, вместо этого ты можешь специализировать класс del_traits, для своего типа, и он будет использоваться в методе push |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |