Russian Qt Forum

Qt => Общие вопросы => Тема начата: dedi4 от Июнь 22, 2011, 23:54



Название: Синглтон и динамическая библиотека
Отправлено: dedi4 от Июнь 22, 2011, 23:54
Здравствуйте. У меня тут вопрос возник. Как сделать синглтон, чтобы при использовании его в динамической библиотеке он не создавался дважды...


Название: Re: Синглтон и динамическая библиотека
Отправлено: ddrtn от Июнь 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;

Однако хотелось бы подробней узнать, в каких он случаях создается дважды. Приведите код, плз.


Название: Re: Синглтон и динамическая библиотека
Отправлено: dedi4 от Июнь 23, 2011, 11:43
Да, у меня что-то наподобие. Только создание экземпляра происходит в методе instance, если экземпляра еще нет.

Дело в том, что есть приложение и несколько библиотек. Один и тот же синглтон используется везде. Когда мы обращаемся к нему в приложении создается один экземпляр. Подгружаем библиотеку, обращаемся, создается второй... Можно как нибудь организовать синглтон, без передачи указателя на него в библиотеку, чтобы везде был только один экземпляр?


Название: Re: Синглтон и динамическая библиотека
Отправлено: ddrtn от Июнь 23, 2011, 12:56
Правильно ли я понимаю?
реализован метод instance примерно так:
Код:
static T* instance() {return smInstance ? smInstance : new T();}

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


Название: Re: Синглтон и динамическая библиотека
Отправлено: ddrtn от Июнь 23, 2011, 13:01
Если так, то синглетный объект должен быть реализован в третьей либе и импортироваться и приложением, и подключаемой дллкой.


Название: Re: Синглтон и динамическая библиотека
Отправлено: dedi4 от Июнь 23, 2011, 18:42
При подключении библиотеки явно ( то-есть  при указании имени или хендла библиотеки яано) создается новый экземпляр синглетона, поскольку smInstance оказывается равным NULL.
Да, именно так.

Если так, то синглетный объект должен быть реализован в третьей либе и импортироваться и приложением, и подключаемой дллкой.
Хм, надо попробовать... спасибо