Здравствуйте, wdm, Вы писали:
wdm>Деструктор с я вызываю из деструктора главной формы соответственно. Когда писал вопрос я это упустил, извините.
wdm>Что касается удаления статических переменных то вопрос можно юыло бы переформулировать след. образом — как управлять последовательностью их уничтожения.
По хорошему никак. Единственный принцип, то, что было инициализировано первым, будет уничтожено последним.
wdm>и все работало на ура. Но сейчас даже такой прием не помогает. Обьясните дураку как правильно?
Можно сделать так:
template<typename T> class foo
{
public:
// как-бы Singleton, работает только в однопоточной среде
static std::deque<T>*& deque_ptr_() const
{
static std::deque<T>* pointer;
return pointer;
}
// образаться к deque при помощи этой функции
static std::deque<T>& get_deque()
{
if (!deque_ptr_())
{
deque_ptr_()=new std::deque<>();
//atexit(&foo::destroy_deque);
// можно сделать так, но в твоем случае,
// это ничего не изменит, поскольку
// функция destroy_deque вызовется
// до удаления большинства статических
// переменных, и последующий вызов get_deque() из
// какого-либо деструктора приведет к зацикливанию
}
return *deque_ptr_();
}
// необходимо явно вызывать при завершении программы
// если раскоментировать atexit выше, то явное удаление не требуется
static void __cdecl destroy_deque()
{
delete deque_ptr_();
deque_ptr_()=0;
}
foo() {}
~foo() {}
};