Oct. 28th, 2010

yigal_s: (Default)
Порадовал, хоть и вогнал в шок, компилятор gcc.

Я умудрился написать вызов pure virtual function из-под конструктора (причем, кажется, практически в той же ситуации, что и пару лет назад на другой работе). На этот раз не то чтоб совсем ступил, это было скорее следствие другой ошибки.

Сюрпризом оказалось то, что код прекрасно себе работал на двух платформах, и даже QA не имел никаких претензий - вызывалась ровно та функция, что мне и была нужна. Отловил же баг мой коллега, скомпилировавший проект без оптимизатора.

Чисто по человечески я авторов gcc прекрасно понимаю - это же совершенный маразм тупо переприсваивать указатель на виртуальную таблицу в процессе конструирования объекта. Как бы, работать надо, а не указатели переприсваивать почем зря.
yigal_s: (Default)
Небезынтересно наблюдать за эволюцией смысла ключегого слова volatile в разных языках и даже разных компиляторах.
Желающие работать с памятью атомарно, вернее, без локов, частенько используют это слово на С++ почем зря. С другой стороны, и убирать его порой как-то страшно бывает. Некоторым. ;-)
Во всяком случае, без качественной подготовки инфраструктуры лично я бы его не убирал. Хотя и использовать его всерьез - ошибочно.

Вот и Майкрософт, к примеру, имеет

LONG InterlockedIncrement(LONG volatile *Addend);

функцию с volatile параметром и точно такую же intrinsic

long _InterlockedIncrement( long * lpAddend );

но уже без volatile.

"Мужыки, что сказать-то хотели???"