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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Shared dll's  (Прочитано 2284 раз)
artiom_kh
Гость
« : Ноябрь 15, 2011, 17:52 »

Добрый день! Есть некий класс синглтона:
Код
C++ (Qt)
/** Singleton pattern with eternal object. The order of using in derives same as in the CSppRefsSingleton. */
template < typename T > class LongLiveSingleton
{
public:
 /** @Returns the instance of object. Object will be constructed in the first call of this method.*/
 static T& getInstance( void )
 {
   static T theSingleInstance; // //class T always has a default constructor
   return theSingleInstance;
 }
protected:
 LongLiveSingleton( void ) {}
 virtual ~LongLiveSingleton( void ) {}
private:
 LongLiveSingleton( const LongLiveSingleton& ) {}
 LongLiveSingleton& operator = ( const LongLiveSingleton& ) { return *this; }
};
 

от него наследуем класс:
Код
C++ (Qt)
class BASE_LIB_EXPORT XmlBuilder : public LongLiveSingleton < XmlBuilder >
{
protected:
 XmlBuilder( void ) {}
 ~XmlBuilder( void ) {}
};
который расположен в некой т.н. "базовой" библиотеке и соответственно является экспортируемым:
Код
C++ (Qt)
#ifdef BASE_LIB
# define BASE_LIB_EXPORT Q_DECL_EXPORT
#else
# define BASE_LIB_EXPORT Q_DECL_IMPORT
#endif
 
Данная "базовая" библиотека юзается другими библиотеками а также основным (exe) исполнимым модулем при помощи неявной загрузки. При сборке в MSVC (2010) всё ок, конструктор и деструктор XmlBuilder вызывается ОДИН раз, при сборке в Qt Creator (minGW) возникают проблемы - вызовы идут при загрузке каждой библиотеки, т.е. синглтон вроде уже и не синглтон совсем получается. Какое лекарство может помочь сей беде?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Ноябрь 16, 2011, 07:08 »

рискну предположить что ф-ия инлайнится. попробуйте в cpp перенести.
Записан
artiom_kh
Гость
« Ответ #2 : Ноябрь 16, 2011, 08:11 »

рискну предположить что ф-ия инлайнится. попробуйте в cpp перенести.
пробовал, но minGW экспорт шаблонов не поддерживает
Записан
artiom_kh
Гость
« Ответ #3 : Ноябрь 16, 2011, 08:48 »

попробовал так:
Код
C++ (Qt)
static __attribute__ ((noinline)) T& getInstance( void )
но безрезультатно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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