Название: Синглтон и динамическая библиотека Отправлено: dedi4 от Июнь 22, 2011, 23:54 Здравствуйте. У меня тут вопрос возник. Как сделать синглтон, чтобы при использовании его в динамической библиотеке он не создавался дважды...
Название: Re: Синглтон и динамическая библиотека Отправлено: ddrtn от Июнь 23, 2011, 07:47 Вот пример шаблона для синглетнона:
Код: template<typename T> class Singleton Гдето в 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. Да, именно так.Если так, то синглетный объект должен быть реализован в третьей либе и импортироваться и приложением, и подключаемой дллкой. Хм, надо попробовать... спасибо |