Премудрости C++Пища для размышлений.Visual C++ 6.0 НЕСОВМЕСТИМ со стандартом ISO C++ 99 года! И как можно в этой среде изучать C++ в универах? И почему нельзя использовать GNU С++, хотя бы MinGW? Последовательность операцийCначала выполняется сравнение, а потом битовые операции! if ( 1 & 0x10 != 0 ) ...Такой вот код всегда дает верное условие. Почему? Потому что (0x10 != 0) = 1, а 1 & 1 = true. Из-за этой ошибки два часа не работал код проверки одного флага %( А надо было вот так: if ( (1 & 0x10) != 0 ) ... Итераторы STLВ работе с итераторами STL, в цикле for надо использовать for (i=coll.begin();i!=coll.end();++i)т.е. != а не < - еще одна ламерская ошибка. Координаты OpenGLВ OpenGL СНАЧАЛА указывать текстурные (и т.п.) координаты, а ПОСЛЕДНИМИ указывать координаты вершин! Удаление объектов из списка указателей (с вызовом деструктора!)Хитрожопейшая функция удаления объектов из списка STL с вызовом деструктора:for (list<TimerEvent*>::iterator=pEvents.begin();pos!=pEvents.end();++pos) { if ((*pos)->pTimerState==TimerEvent::state_must_destroy) { //тут метим объект 0 и деструктим TimerEvent* ev=(*pos); (*pos)=0; delete ev; } else if ((*pos)->pTimerState==TimerEvent::state_must_remove) //а тут - только метим, а объект остается в памяти (*pos)=0; } //теперь удаляем все нули - и дело в шляпе! pEvents.remove(0);Суть в том, что сначал удаляем, потом метим нулями, потом удаляем все нули! Определение шаблоновДля того, чтобы использовать шаблоны (templates), надо все функции реализовывать в заголовке, а иначе невозможно будет их скомпилить!!! |
© 2007 coldFlame aka Леонид Шевцов |