Здравствуйте, 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;