C ++ имеет то, что называется «оптимизация пустой базы». Если у класса нет членов, ему не нужно занимать место, когда он используется в качестве базового класса. Примером того, почему это важно, является std::unary_function<T, U>
. Он существует, чтобы предоставить вам простой набор typedefs. Эти определения типов не должны влиять на размер вашего класса функторов.
Если у вас есть базовый класс с указателем vtable, этот указатель, вероятно, может использоваться совместно с производным классом. Вы просто создаете vtable для производного класса, который добавляет свои собственные методы после метода базового класса.
Теперь вы можете достичь аналогичного базового класса "без дополнительных накладных расходов". По всей видимости, GCC называет это «почти пустым».