final — это не только запрет наследования. Это подсказка компилятору для девиртуализации. Компилятор получает гарантию, что другой реализации не будет.
🍉 До и после:
class Base {
virtual void process() = 0;
};
class Derived : public Base {
void process() override final { /* ... */ }
// ^^^^^
};Теперь компилятор знает: Derived::process — последняя версия. При вызове через Derived* или Derived& он может девиртуализировать:
void hotPath(Derived& obj) {
obj.process(); // прямой вызов, не через vtable
}📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#под_капотом