Re: Удаление статических членов
От: Aera Беларусь  
Дата: 15.11.05 07:46
Оценка:
Здравствуйте, wdm, Вы писали:

wdm>//...
wdm>template <TObject>
wdm>class foo{
wdm>//... 
wdm>   static std::deque<TObject> TObjectMas;
wdm>public:
wdm>   foo(){}
wdm>   ~foo(){
wdm>       // что то делаем
wdm>   }
wdm>};
wdm>//...
wdm>template<> std::deque<TSerialObject * > foo<TSerialObject> TObjectMas;
wdm>//....
wdm>// где-то в программе
wdm>class client{
wdm>    //...
wdm>    foo<TSerialOblect * > f;
wdm>public:
wdm>    client(){}
wdm>    ~client(){} 
wdm>};

wdm>//...
wdm>При инициализации главной формы (проект на C++ Builder) в её конструкторе
wdm>делаем так:
wdm>client * c=new client;
wdm>Вопрос: Почему при закрытии приложения когда мы добираемся до деструктора
wdm>foo::~foo(){} деструктор ~deque уже был вызван и удалил очередь вместе со всем содержимым?

Не понятно в какой момент ты делал delete c;, но возможно, что уже после того, как начала отрабатываться уничтожение глобальных переменных. Т.е. вызов кода из деструктора статического экземпляра класса (см ниже) может привести к такому результату
class Temp 
{
 ~Temp()
 {
   delete c; // часть статических переменных уже была уничтожена
 }
};
Temp temp;
--
RedApe
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.