| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Удаление синглтонов |
| Автор: toxx 11.4.2013, 19:23 |
| Добрый вечер, на работе возникла задача, правильно удалить синглтоны(их много более 40-50). причем разных видов(статические и динамические). Но проблема в том, что из-за их большого количества непонятно когда точно их можно удалять, а из-за того что они неправильно удаляются или вообще не удаляются, в конце работы приложения приложение редко но падает на удалении. Сам думаю правильно реализовать методы Destroy() для удаления памяти за синглтоном и всем остальным, что выделено динамически. и метод Terminate() для очистки листов и всяких объектов внутри. Возможно есть смысл иметь какой-то менеджер на ними, чтобы верно удалять. Никто не сталкивался с подобной проблемой? Может быть кто-то сталкивался и обрисует идею или подскажет в каком направлении двигаться. За любой пост спасибо. |
| Автор: Result 11.4.2013, 21:48 | ||
Александреску сталкивался |
| Автор: toxx 11.4.2013, 22:28 |
| Хм, как столь интересная книга ушла от моего глаза, понять не могу, спасибо=) |
| Автор: borisbn 12.4.2013, 06:21 |
| > За любой пост спасибо. За любой, так за любой... Синглтоны - зло. Не используй их вообще. Кстати, я когда прочитал заголовок, решил что вопрос об избавлении от синглтонов )) |
| Автор: toxx 12.4.2013, 09:48 |
| borisbn Нужно было написать приписку(Кроме постов сиглтоны зло) |
| Автор: Alca 12.4.2013, 11:14 | ||||
Я так и делал. Добавлено через 1 минуту и 30 секунд
Почему это вдруг, если нужен только один экземпляр класса? |
| Автор: toxx 12.4.2013, 13:07 |
| Result, Книга полезная. Не буду разжигать холивар, но синглтоны полезны, но думаю если использовать их с умом. согласен поэтому с Alca А так как сделаны у нас... они неконтролируемы и их много. |
| Автор: borisbn 12.4.2013, 14:06 |
1. Зависимость от синглтона не видна в контракте твоего класса - твой класс неудобно рефакторить 2. Проблемы с удалением: удалять (вызывать Destroy()) нужно гарантировано после того, как все, кто с ним работает, перестали его вызывать, иначе получится воскрешение мёртвых 3. Лишний вызов функции - мелочь, конечно, но всё-таки 4. В случае (пусть даже и архи-редком), когда всё-таки потребуется иметь два экземпляра класса, рефакторинг будет ооооч. неприятный 5. Для тестирования частенько нужно подменять реальный объект фейковым (или с другим функционалом). В случае с синглтоном придётся менять сам синглтон. У меня была такая проблема: в одной программе я для хранения настроек использовал синглтон Config. Как-то меня попросили сделать из программы dll, экспортирующую класс с определённым интерфейсом, для вставки в другую программу. Я сделал, а оказалось, что они хотели создавать 2 экземпляра моего класса. Получилась каша с настройками и пришлось переделывать. Были и ещё примеры (я раньше много грешил с синглтонами) |
| Автор: Result 12.4.2013, 14:55 | ||
Насколько помню ,в либе Loki реализован паттерн синглтон на темплейтах, т.е. ничего менять не нужно. |
| Автор: toxx 13.4.2013, 21:10 |
| Result Так оно и есть |