Re[3]: Удаление статических членов
От: Aera Беларусь  
Дата: 15.11.05 09:42
Оценка:
Здравствуйте, 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() {}
};
--
RedApe
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.