Типизированный синглтон расширение, потенциальные проблемы??? |
Здравствуйте, гость ( Вход | Регистрация )
Типизированный синглтон расширение, потенциальные проблемы??? |
ViGOur |
26.2.2013, 14:24
Сообщение
#1
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Подумалось мне тут, что если взять типизированный синглтон:
который создает-возвращает указатель на класс типа T, то при вызове: вызываться декремент счетчика ссылок у нас не будет и его нужно вызывать в ручную, что чревато ошибками!Следовательно нужно создать некий класс обертку, который открыто унаследован от класса T и закрыто от нашего типизированного синглтона, а в нем уже переопределить operator delete, в котором собственно и вызывать наш CTypedSingleton<T>::free(); Что я и сделал в коде ниже: собственно сам код
Что вы скажите? |
|
|
AD |
26.2.2013, 15:40
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Слушай, а почему нельзя пользоваться обычным Singleton??? Ну вот такого рода:
Чем этот синглетон будет плох? Почему его не использоватьПример использования такой, к примеру:
|
|
|
ViGOur |
26.2.2013, 15:44
Сообщение
#3
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
А если объектов будет много, они тяжеловесны и не все всегда нужны?
|
|
|
AD |
26.2.2013, 15:55
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
lanz |
26.2.2013, 16:17
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Может тогда вообще не стоит делать их синглтонами?
|
|
|
ViGOur |
26.2.2013, 17:07
Сообщение
#6
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
А тогда как за нимим следить проще чтобы не плодить?
|
|
|
Алексей1153 |
26.2.2013, 17:14
Сообщение
#7
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ViGOur, конструктор и виртуальный деструктор рулят Счётчик - (опять это слово ) инкапсулированный статический синглтон класса
|
|
|
Iron Bug |
26.2.2013, 17:51
Сообщение
#8
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
тема синглтона, на самом деле, не такая простая, как кажется. это уже тут обсуждалось:
http://www.forum.crossplatform.ru/index.php?showtopic=8976 если делать всё по-честному, там нужны двойные локи. можно сделать ну очень красивый синглтон с типами, в С++11. но это не поддерживает msvc, например. |
|
|
ViGOur |
26.2.2013, 20:26
Сообщение
#9
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Алексей1153, читай внимательней...
Iron Bug, согласен синхронизация всегда нужна. В примере я все упростил, чтобы было понятней... Сейчас почитаю. |
|
|
Алексей1153 |
26.2.2013, 20:29
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
который создает-возвращает указатель на класс типа T, то при вызове: delete p; // указатель на класс типа T вызываться декремент счетчика ссылок у нас не будет и его нужно вызывать в ручную, что чревато ошибками! что тут читать внимательнее то: при вызове delete вызовется деструктор (в случае виртуального - начиная с детей, заканчивая родителем). В родительском классе уменьшаем счётчик. Ну а то, что ты предпочёл шаблон там, где нужно было применить виртуальное наследование - это кто ж виноват |
|
|
Текстовая версия | Сейчас: 2.1.2025, 20:32 |