Вопросы про novtable
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 25.10.19 13:37
Оценка:
Если __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 я провел доп. эксперимент. Я его тут ниже, отдельно опубликую.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Отредактировано 25.10.2019 13:47 DDDX . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.