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