Интересно, что то, что я сейчас делаю, является позором для C++, или если все в порядке.C++: наследование без виртуальности
Я работаю над кодом для вычислительного назначения. Для некоторых классов я использую обычную схему наследования с виртуальностью/полиморфизмом. Но мне нужны некоторые классы для интенсивного вычисления, и было бы здорово избежать накладных расходов из-за виртуальности.
В принципе, я хочу использовать эти классы без указателей или перенаправления: наследование только здесь, чтобы избежать много копий/вставки кода (размер файла базового класса равен 60Ko (что много кода)). Таким образом, нет виртуальных функций и нет виртуального дескриптора.
Интересно, отлично ли это с точки зрения C++ или может создавать побочные эффекты (соответствующие классы будут много использоваться в программе).
спасибо.
Это нормально, но виртуальные методы на самом деле не имеют больших накладных расходов. Если ваше «интенсивное вычисление» не включает в себя нелепое количество вызовов виртуальных методов, то это действительно не имеет значения. – robert
Если вы не хотите переоценивать что-либо, возможно, композиция вместо наследования лучше? –
Даже если есть виртуальные методы, компилятор может быть в состоянии оптимизировать их для обычных вызовов функций, если известен тип объекта (например, когда вы работаете над экземпляром, выделенным стеком производного класса). – leftaroundabout