Удаление синглтонов

 
0
 
C++
ava
toxx | 11.04.2013, 20:23
Добрый вечер,
на работе возникла задача, правильно удалить синглтоны(их много более 40-50).
причем разных видов(статические и динамические).
Но проблема в том, что из-за их большого количества непонятно когда точно их можно удалять, а из-за того что они неправильно удаляются или вообще не удаляются, в конце работы приложения приложение редко но падает на удалении.

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

Никто не сталкивался с подобной проблемой? Может быть кто-то сталкивался и обрисует идею или подскажет в каком направлении двигаться.

За любой пост спасибо.
Comments (9)
ava
Result | 11.04.2013, 21:48 #
Цитата (toxx @ 11.4.2013,  19:23)
Никто не сталкивался с подобной проблемой? Может быть кто-то сталкивался и обрисует идею или подскажет в каком направлении двигаться.



За любой пост спасибо.

Александреску сталкивался  smile в манускрипте "Современное проектирование на С++" повествуется о нескольких подходах к решению этой пичальки 
ava
toxx | 11.04.2013, 22:28 #
Хм, как столь интересная книга ушла от моего глаза, понять не могу, спасибо=)
ava
borisbn | 12.04.2013, 06:21 #
> За любой пост спасибо.
За любой, так за любой...

Синглтоны - зло. Не используй их вообще.
Кстати, я когда прочитал заголовок, решил что вопрос об избавлении от синглтонов ))
ava
toxx | 12.04.2013, 09:48 #
borisbn
Нужно было написать приписку(Кроме постов сиглтоны зло)  smile 
ava
Alca | 12.04.2013, 11:14 #
Цитата


Сам думаю правильно реализовать методы Destroy() для удаления памяти за синглтоном и всем остальным, что выделено динамически.

и метод Terminate() для очистки листов и всяких объектов внутри.


Я так и делал.
ava
toxx | 12.04.2013, 13:07 #
Result, Книга полезная.

 smile 
Не буду разжигать холивар, но синглтоны полезны, но думаю если использовать их с умом. согласен поэтому с Alca
А так как сделаны у нас... они неконтролируемы и их много.
ava
borisbn | 12.04.2013, 14:06 #
Цитата (Alca @  12.4.2013,  11:14 findReferencedText)
Почему это вдруг, если нужен только один экземпляр класса? 

1. Зависимость от синглтона не видна в контракте твоего класса - твой класс неудобно рефакторить
2. Проблемы с удалением: удалять (вызывать Destroy()) нужно гарантировано после того, как все, кто с ним работает, перестали его вызывать, иначе получится воскрешение мёртвых
3. Лишний вызов функции - мелочь, конечно, но всё-таки
4. В случае (пусть даже и архи-редком), когда всё-таки потребуется иметь два экземпляра класса, рефакторинг будет ооооч. неприятный
5. Для тестирования частенько нужно подменять реальный объект фейковым (или с другим функционалом). В случае с синглтоном придётся менять сам синглтон.

У меня была такая проблема: в одной программе я для хранения настроек использовал синглтон Config. Как-то меня попросили сделать из программы dll, экспортирующую класс с определённым интерфейсом, для вставки в другую программу. Я сделал, а оказалось, что они хотели создавать 2 экземпляра моего класса. Получилась каша с настройками и пришлось переделывать. Были и ещё примеры (я раньше много грешил с синглтонами)  smile 
ava
Result | 12.04.2013, 14:55 #
Цитата (borisbn @ 12.4.2013,  14:06)
5. Для тестирования частенько нужно подменять реальный объект фейковым (или с другим функционалом). В случае с синглтоном придётся менять сам синглтон.


Насколько помню ,в либе Loki реализован паттерн синглтон на темплейтах, т.е. ничего менять не нужно.
ava
toxx | 13.04.2013, 21:10 #
Result
Так оно и есть
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Alca   toxx ava  borisbn   Result
advanced
Submit