| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > синглетон |
| Автор: zss 18.2.2010, 22:05 |
| есть устройство. С ним в один момент времени должен работать один объект класса, т.к. он хранит состояние устройства. То есть мне нужна возможность запрета создания второго экземпляра, есть уже создан один. Синглетом Майерса не подходит, т.к. объект должен создаваться и разрушаться динамически. Как еще можно запретить создание второго экземпляра. |
| Автор: mes 18.2.2010, 23:14 |
а что должно происходить при вызове инстанции, если обьект еще не создан ? |
| Автор: borisbn 19.2.2010, 08:08 | ||||
| Такой singletone подойдёт? h-файл
cpp-файл
Когда нужно поработать с устройством вызывается Device::instance().foo() Когда нужно освободить устройство вызывается Device::release() |
| Автор: zss 19.2.2010, 10:11 | ||
еще нашел такой
но что-то меня смущает навороченность со static |
| Автор: bsa 19.2.2010, 11:18 | ||
| zss, синглтон без статик вообще невозможен... Если тебе необходимо управляемое создание/уничтожение, то можно поступить так:
|
| Автор: zss 19.2.2010, 11:43 | ||
но в данно случае мн е не удастся управлять временем жизни объекта, а это необходимо. ну может тогда не синглетон, а, например, именованный mutex в конструкторе |
| Автор: mes 19.2.2010, 12:19 | ||
как я понял, Вам надо при создании первого объекта создать "устройство", при каждом следущем создании объекта использовать тоже самое "устройство", которое должно быть удалено вместе с удалением последнего объекта, его использующего . Тогда поможет патерн PImpl, только сделать его со статической shared имплементацией. если ж понял не правильно, то тогда уточните поведение, потому что задача не очень ясна и непонятно какой из кучи вариантов Вам подойдет |
| Автор: zss 19.2.2010, 12:26 | ||
ну или например запретить создание сбросом исключения |
| Автор: mes 19.2.2010, 12:32 |
ну это вообще просто, но смысла в таком поведение я не вижу, хотя Вам видней, что требуется опять же заводите статическую переменную, и если в конструкторе она в состоянии "создано", то бросаете исключение, иначе просто переводите в состояние "создано", а в деструкторе обратно. |
| Автор: azesmcar 19.2.2010, 12:50 |
| zss Не пойму чем static-и не угодили. |