В C ++ не нарушает ли ABI переопределение существующей виртуальной функции ?

Моя библиотека имеет два класса: базовый класс и производный класс. В текущей версии библиотеки базовый класс имеет виртуальную функцию foo (), а производный класс не переопределяет ее. В следующей версии я d, чтобы производный класс переопределил его. Это нарушает ABI? Я знаю, что введение новой виртуальной функции обычно дает, но это похоже на особый случай. Моя интуиция подсказывает, что следует изменить смещение в vtbl без фактического изменения размера таблицы.

Очевидно, поскольку стандарт C ++ не требует определенного ABI, этот вопрос в некоторой степени зависит от платформы, но на практике то, что ломается и поддерживает ABI похож на большинство компиляторов. Меня интересует поведение GCC, но чем больше компиляторов люди могут ответить, тем более полезным будет этот вопрос;)

11
задан Joseph Garvin 21 April 2011 в 15:13
поделиться