Евгений Ерохин - Back Deep to Basics: Наследование и виртуальность в C++ (Часть 1)

Поділитися
Вставка
  • Опубліковано 18 жов 2024
  • Подробнее о конференции C++ Russia: jrg.su/W8skjE
    - -
    Наследование, виртуальные функции, v-таблицы, виртуальное наследование (более подробно в Части 2) - вещи до боли знакомые каждому C++ разработчику. Но так ли хорошо мы знаем эти механизмы?
    Практика собеседований показывает, что как только дело доходит до деталей, возникает много нюансов, на которые не всегда находится ответ. Эти вещи напрямую влияют на производительность, объем наших бинарных файлов, а иногда даже на безопасность нашего кода. Так давайте вернемся к началам и разберемся в деталях этой машинерии. Внезапно: рассмотрим, что есть нового в этой области и как оно работает под капотом.
    Часть 2 - • Евгений Ерохин - Back ...
    Скачать презентацию с сайта C++ Russia - jrg.su/IzjGXx

КОМЕНТАРІ • 1

  • @SemyonLagutin
    @SemyonLagutin 5 місяців тому +4

    Неточность по поводу UB на 32:38. [class.cdtor], пункт 4:
    When a virtual function is called directly or indirectly from a constructor or from a destructor, including during the construction or destruction of the class’s non-static data members, and the object to which the call applies is the object (call it x) under construction or destruction, the function called is the final overrider in the constructor’s or destructor’s class and not one overriding it in a more-derived class. If the virtual function call uses an explicit class member access and the object expression refers to the complete object of x or one of that object’s base class subobjects but not x or one of its base class subobjects, the behavior is undefined.
    То есть UB будет только в том случае, если в конструкторе попытаться вызвать виртуальную функцию по явной ссылке или указателю на тип, которого нет в текущем контексе в базовых. В остальных же случаях виртуальность просто "отключается" в конструкторах и деструкторах, поэтому совершенно легально вызывать виртульные функции в конструторах.