Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 03.03.2013, 19:08   #1
wolfhound512
Знающий
 
Аватар для wolfhound512
 
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений
(для 299 пользователей)
Причуды GCC

Объясните, как такое возможно?


Суть проблемы:
есть шаблонный класс
template <class T> class cSingleton {
protected:
	...
	static T* _this;
	...
	cSingleton() {
		assert( _this == NULL );
		_this = (T*) this;
	}
}
И есть несколько классов производных от него.
Все классы работают прекрасно, кроме того что на картинке, у него _this всегда равен нулю, я даже повторно в собственный конструкторе присвоение вынес, все равно, на картинке видно что _this остается равен нулю.
В чем проблема?
__________________
GUI, GUIw512, AlbaLynx, Форум
(Offline)
 
Ответить с цитированием
Старый 04.03.2013, 14:35   #2
falcon
Разработчик
 
Аватар для falcon
 
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений
(для 470 пользователей)
Ответ: Причуды GCC

не совсем понятно поведение..
но и реализация как-то не совсем понятна..
предпочитаю такого рода магию:

template <class T>
class Singleton
{
protected:
     Singleton() { }
public:
     static T& Instance()
     {
          static T self;
          return self;
     }
};


class Foo : public Singleton<Foo>
{
};
(Offline)
 
Ответить с цитированием
Старый 19.03.2013, 13:36   #3
jimon
 
Сообщений: n/a
Ответ: Причуды GCC

так у тебя в дебагере nullptr или во время запуска ? потому что компилятор имеет право перекраивать код как угодно (обычно это в релизе происходит), и может он перенес твое приравнивание на пару строк ниже
 
Ответить с цитированием
Старый 19.03.2013, 14:28   #4
wolfhound512
Знающий
 
Аватар для wolfhound512
 
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений
(для 299 пользователей)
Ответ: Причуды GCC

И в дебаггере и во время запуска (программа вылетает).
Сделал исключение для этого класса: убрал наследование от cSingleton, прописал тот же функционал в самом классе (просто скопировал из cSingleton) и оно заработало.
__________________
GUI, GUIw512, AlbaLynx, Форум
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 18:53.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com