Некоторые методы оптимизации виртуального наследования:
- Применение идиомы невиртуального интерфейса (NVI). 2 Её смысл в том, чтобы обернуть открытыми невиртуальными функциями-членами вызовы менее доступных виртуальных функций. 2
- Замена виртуальных функций членами данных — указателями на функции. 2 Это упрощённое проявление паттерна проектирования «Стратегия». 2
- Замена виртуальных функций членами данных — tr1::function. 2 Это позволяет применять любую вызываемую сущность, сигнатура которой совместима с нужной. 2
- Замена виртуальных функций из одной иерархии виртуальными функциями из другой иерархии. 2 Это традиционная реализация паттерна проектирования «Стратегия». 2
- Инициализация всех подобъектов виртуальных базовых классов самим производным классом. 3 Например, компилятор может передавать специальный дополнительный аргумент в конструкторы, который будет указывать не инициализировать класс базового класса. 3
- Реализация функций, которые не будут копировать члены класса базового. 3 Это поможет избежать двойного копирования объекта базового класса. 3
Также для оптимизации виртуального наследования рекомендуется не использовать без большой необходимости виртуальные функции, виртуальные базовые классы, деструкторы и другие механизмы. 5