Преимущества использования наследования значительно перевешивают недостатки.
Первое падение - это размер объекта в памяти, который при использовании виртуальных функций имеет дополнительный указатель на таблицу виртуальных функций.
Виртуальные вызовы функций также требуют нескольких дополнительных шагов всборка по сравнению с обычными вызовами.
Не виртуальные вызовы функций стоят одинаково с точки зрения производительности.
Размер объекта также может увеличиваться как объект класса A
, если A
полученный из B
, содержит всю информацию из B
.Конечно, при продуманном дизайне этого не происходит, потому что даже без наследования A
будет содержать всю информацию в B
.
Еще одной проблемой будет использование dynamic_cast
или static_cast
, с которым вы не столкнетесь в среде без наследования, но этого также можно избежать, даже используя наследование.