Russian Qt Forum
Сентябрь 30, 2024, 18:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Синглтон и динамическая библиотека  (Прочитано 3326 раз)
dedi4
Гость
« : Июнь 22, 2011, 23:54 »

Здравствуйте. У меня тут вопрос возник. Как сделать синглтон, чтобы при использовании его в динамической библиотеке он не создавался дважды...
Записан
ddrtn
Гость
« Ответ #1 : Июнь 23, 2011, 07:47 »

Вот пример шаблона для синглетнона:
Код:
template<typename T> class Singleton
{
public:
~Singleton()
{
smInstance = 0;
}

static T* instance() {return smInstance;}
protected:
static T* smInstance;

Singleton()
{
if (!smInstance)smInstance = static_cast<T*>(this);
}
};

Гдето в foo.h:
Код:
class Foo: public Singleton<Foo>
{
...
};

Гдето в foo.cpp:
Код:
template<> Foo* Singleton<Foo>::smInstance = 0;

Однако хотелось бы подробней узнать, в каких он случаях создается дважды. Приведите код, плз.
Записан
dedi4
Гость
« Ответ #2 : Июнь 23, 2011, 11:43 »

Да, у меня что-то наподобие. Только создание экземпляра происходит в методе instance, если экземпляра еще нет.

Дело в том, что есть приложение и несколько библиотек. Один и тот же синглтон используется везде. Когда мы обращаемся к нему в приложении создается один экземпляр. Подгружаем библиотеку, обращаемся, создается второй... Можно как нибудь организовать синглтон, без передачи указателя на него в библиотеку, чтобы везде был только один экземпляр?
Записан
ddrtn
Гость
« Ответ #3 : Июнь 23, 2011, 12:56 »

Правильно ли я понимаю?
реализован метод instance примерно так:
Код:
static T* instance() {return smInstance ? smInstance : new T();}

При подключении библиотеки явно ( то-есть  при указании имени или хендла библиотеки яано) создается новый экземпляр синглетона, поскольку smInstance оказывается равным NULL.
Записан
ddrtn
Гость
« Ответ #4 : Июнь 23, 2011, 13:01 »

Если так, то синглетный объект должен быть реализован в третьей либе и импортироваться и приложением, и подключаемой дллкой.
Записан
dedi4
Гость
« Ответ #5 : Июнь 23, 2011, 18:42 »

При подключении библиотеки явно ( то-есть  при указании имени или хендла библиотеки яано) создается новый экземпляр синглетона, поскольку smInstance оказывается равным NULL.
Да, именно так.

Если так, то синглетный объект должен быть реализован в третьей либе и импортироваться и приложением, и подключаемой дллкой.
Хм, надо попробовать... спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.04 секунд. Запросов: 20.