![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
есть устройство. С ним в один момент времени должен работать один объект класса, т.к. он хранит состояние устройства.
То есть мне нужна возможность запрета создания второго экземпляра, есть уже создан один. Синглетом Майерса не подходит, т.к. объект должен создаваться и разрушаться динамически. Как еще можно запретить создание второго экземпляра. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а что должно происходить при вызове инстанции, если обьект еще не создан ? |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Такой singletone подойдёт?
h-файл
cpp-файл
Когда нужно поработать с устройством вызывается Device::instance().foo() Когда нужно освободить устройство вызывается Device::release() Это сообщение отредактировал(а) borisbn - 20.2.2010, 11:39 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
еще нашел такой
но что-то меня смущает навороченность со static |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
zss, синглтон без статик вообще невозможен...
Если тебе необходимо управляемое создание/уничтожение, то можно поступить так:
|
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
но в данно случае мн е не удастся управлять временем жизни объекта, а это необходимо. ну может тогда не синглетон, а, например, именованный mutex в конструкторе Это сообщение отредактировал(а) zss - 19.2.2010, 11:43 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
как я понял, Вам надо при создании первого объекта создать "устройство", при каждом следущем создании объекта использовать тоже самое "устройство", которое должно быть удалено вместе с удалением последнего объекта, его использующего . Тогда поможет патерн PImpl, только сделать его со статической shared имплементацией. ![]() если ж понял не правильно, то тогда уточните поведение, потому что задача не очень ясна и непонятно какой из кучи вариантов Вам подойдет ![]() Это сообщение отредактировал(а) mes - 19.2.2010, 12:21 |
|||
|
||||
zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
ну или например запретить создание сбросом исключения |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну это вообще просто, но смысла в таком поведение я не вижу, хотя Вам видней, что требуется ![]() опять же заводите статическую переменную, и если в конструкторе она в состоянии "создано", то бросаете исключение, иначе просто переводите в состояние "создано", а в деструкторе обратно. ![]() Это сообщение отредактировал(а) mes - 19.2.2010, 12:34 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
zss
Не пойму чем static-и не угодили. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |