Если __declspec(novtable) реально уменьшает размер бинарников, то почему оптимизатор не юзает эту штуку по своему уразумению?
Вот у меня есть класс вида:
class t_err_records_r
{
public:
virtual ~t_err_records_r(){;}
//interface ------------------------------------------------------------
virtual size_t get_record_count()const=0;
virtual t_err_record::self_ptr get_record(size_t record_num)const=0;
};//class t_err_records_r
Добавил к нему и еще к паре аналогичных мелких абстрактных классов __declspec(novtable), бинарник (VS2019) уменьшился на килобайт.
Причем один из этих классов наследует t_err_records_r — добавляется еще один абстрактный виртуальный метод.
---
Еще вопросы по novtable. Возможны ли засады:
2. С виртуальными деструкторами novtable-классов?
3. С dynamic_cast-ом?
4. C абстрактным классом, экспортируемым DLL-ю?
На сколько я понимаю, в конструкторе/деструкторе novtable-класса не стоит:
— обращаться (напрямую/косвенно) к виртуальным методам
— юзать dynamic_cast к самому себе или родительским классам
и тогда проблем не будет.
Так что, в принципе, остается только первый вопрос только про оптимизатор. Или я его (оптимизатор) не правильно готовлю?
PS. C dynamic_cast я провел доп. эксперимент. Я его тут ниже, отдельно опубликую.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --