![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Глобальные переменные это не есть гуд.
Решение - создать класс со статическими переменными и статическими методами для работы с ними и собственно юзать их. Так и поступал. Пока не наткнулся на Шаблон Синглетон (Singleton pattern). Вещь любопытная и видимо стоящая. Как вы считаете комрады? |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
andrew_121, ага. от туда и почерпнул
![]() |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
автор, что ты от форумчан хочешь?
благословения? в таком случа благословляю тебя на использование синглетона... |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Alek86 хочу я мнения. фиг ты с этим синглетоном или же нет. а то малоли какие нибудь подводные камни.
но за благословление спасибо. ![]() Это сообщение отредактировал(а) mrbrooks - 8.8.2008, 10:59 |
|||
|
||||
UnrealMan |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Википедия отжигает
Зачем синглтону (тем более создаваемому в статической памяти) виртуальный деструктор? ![]() |
||||||
|
|||||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Меня запинают, но в C# идёт такое же обсуждение - что лучше static class, или singleton. ыыы.
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
ыыы. и там тоже благославляют на использование сиглитонов? |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
нет. там некоторые говорят что статики руляд. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
На первый взгляд кажется, что для создания класса singleton нужны лишь
статические функции-члены и переменные-члены.
Однако это решение в некоторых ситуациях имеет много недостатков. Основная проблема заключается в том, что статические функции не могут быть виртуальными, что не позволяет изменять поведение объекта при открытии кода класса MyOnlyPrinter. Кроме того, инициализация и удаление объекта затрудняются. В классе MyOnlyPrinter нет конкретных точек, в которых инициализируются и удаляются данные, хотя эти задачи могут быть нетривиальными — например, переменная-член default- Font, может зависеть от скорости обмена данными порта, поведение которого описывается переменной printingport_. (с) Александреску -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Alek86 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вообще-то все правильно синглтон из примера используется как базовый класс
Добавлено @ 16:44 и где написано, что он создается в статической памяти? Это сообщение отредактировал(а) Alek86 - 8.8.2008, 16:44 |
||||
|
|||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
см ф-цию Instance.
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Ну и что с того? Виртуальный деструктор нужен для того, чтобы 1) объект, размещённый в динамической памяти, можно было корректно удалить, используя указатель на базовый подобъект, 2) базовый класс стал полиморфным. В приведённом примере создание и уничтожение объекта-синглтона полностью отдано на откуп базовому классу. Никто снаружи не вправе явно вызывать деструктор или delete для объекта-синглтона. С учётом того, что базовый класс знает точный тип производного (его передают шаблонным параметром), даже если объект будет создаваться в динамической памяти, корректно удалить его без виртуального деструктора не составит никакого труда. Таким образом, первый пункт совершенно не актуален. Теперь разберёмся со вторым пунктом. Нужно ли здесь полиморфное поведение Singleton<T>? Зачем? Какой толк использовать указатель или ссылку на Singleton<T> как операнд dynamic_cast или typeid? Никакого. Итог: виртуальный деструктор здесь не нужен. Применение "умных" правил без понимания того, какие рациональные мотивы стоят за этими правилами, есть свидетельство тупости. |
|||
|
||||
Torsten |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 10.6.2008 Где: Pskov Репутация: 3 Всего: 7 |
Правило очень простое. Если во время выполнения программы может быть создан и использован только 1 обьект некоторого класса - это сигнлтон. Иногда конечно могут быть исключения, зависит от контекста, но в 99% это синглтон. Это сообщение отредактировал(а) Torsten - 10.8.2008, 20:06 --------------------
We have no begining, we have no end. We are infinite. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |