Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление синглтонов 
V
    Опции темы
toxx
Дата 11.4.2013, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 2
Всего: 13



Добрый вечер,
на работе возникла задача, правильно удалить синглтоны(их много более 40-50).
причем разных видов(статические и динамические).
Но проблема в том, что из-за их большого количества непонятно когда точно их можно удалять, а из-за того что они неправильно удаляются или вообще не удаляются, в конце работы приложения приложение редко но падает на удалении.

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

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

За любой пост спасибо.
PM MAIL   Вверх
Result
Дата 11.4.2013, 21:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 15.5.2011

Репутация: 2
Всего: 5



Цитата(toxx @ 11.4.2013,  19:23)
Никто не сталкивался с подобной проблемой? Может быть кто-то сталкивался и обрисует идею или подскажет в каком направлении двигаться.

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

Александреску сталкивался  smile в манускрипте "Современное проектирование на С++" повествуется о нескольких подходах к решению этой пичальки 
PM   Вверх
toxx
Дата 11.4.2013, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 2
Всего: 13



Хм, как столь интересная книга ушла от моего глаза, понять не могу, спасибо=)
PM MAIL   Вверх
borisbn
Дата 12.4.2013, 06:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



> За любой пост спасибо.
За любой, так за любой...

Синглтоны - зло. Не используй их вообще.
Кстати, я когда прочитал заголовок, решил что вопрос об избавлении от синглтонов ))


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
toxx
Дата 12.4.2013, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 2
Всего: 13



borisbn
Нужно было написать приписку(Кроме постов сиглтоны зло)  smile 
PM MAIL   Вверх
Alca
Дата 12.4.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

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

Я так и делал.

Добавлено через 1 минуту и 30 секунд
Цитата

Синглтоны - зло. Не используй их вообще.

Почему это вдруг, если нужен только один экземпляр класса?


--------------------
PM WWW ICQ Skype Jabber   Вверх
toxx
Дата 12.4.2013, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 2
Всего: 13



Result, Книга полезная.

 smile 
Не буду разжигать холивар, но синглтоны полезны, но думаю если использовать их с умом. согласен поэтому с Alca
А так как сделаны у нас... они неконтролируемы и их много.

PM MAIL   Вверх
borisbn
Дата 12.4.2013, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(Alca @  12.4.2013,  11:14 Найти цитируемый пост)
Почему это вдруг, если нужен только один экземпляр класса? 

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

У меня была такая проблема: в одной программе я для хранения настроек использовал синглтон Config. Как-то меня попросили сделать из программы dll, экспортирующую класс с определённым интерфейсом, для вставки в другую программу. Я сделал, а оказалось, что они хотели создавать 2 экземпляра моего класса. Получилась каша с настройками и пришлось переделывать. Были и ещё примеры (я раньше много грешил с синглтонами)  smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Result
Дата 12.4.2013, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 15.5.2011

Репутация: 2
Всего: 5



Цитата(borisbn @ 12.4.2013,  14:06)
5. Для тестирования частенько нужно подменять реальный объект фейковым (или с другим функционалом). В случае с синглтоном придётся менять сам синглтон.

Насколько помню ,в либе Loki реализован паттерн синглтон на темплейтах, т.е. ничего менять не нужно.
PM   Вверх
toxx
Дата 13.4.2013, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 2
Всего: 13



Result
Так оно и есть
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0853 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.