Описание. При использовании наследования, шаблонов и виртуальных методов компилятор может сгенерировать неправильные таблицы виртуальных функций! Воспроизвести на маленьком проекте, к сожалению, до сих пор не удалось. На больших проектах это вылазило уже около 5 раз. За последний месяц — два раза. Причем один и тот же код в разных проектах может скомпилироваться правильно, а может — нет. Диагноз Судя по всему — компилятор, при генерации методов шаблона или потомка от шаблона, иногда не видит, что метод определен как виртуальный в базовом классе. И может в производном классе оставить реализацию базового класса. Одним из глухих случаев был вариант, когда эта базовая реализация была определена как чистая виртуальная функция. А может орать, что отсутствует реализация абстрактного метода, хотя в производном классе этот метод реализован. Еще один случай, от которого я еще не отошел — указатель элемента VT, может указывать на совершенно другую функцию! Лечение В каждом производном классе нужно явно указывать virtual для всех переопределяемых методов. Так что, поклонникам этого чудовища нужно держать себя обеими руками за ... короче не расслабляться PS. Пишу сюда, а не в средства разработки, что бы прочитало как можно больше заинтересованного народа. |