私のライブラリには、基本クラスと派生クラスの 2 つのクラスがあります。ライブラリの現在のバージョンでは、基本クラスに仮想関数 foo() があり、派生クラスはそれをオーバーライドしません。次のバージョンでは、派生クラスでオーバーライドしたいと考えています。これはABIを壊しますか?通常、新しい仮想関数を導入することで問題が解決することはわかっていますが、これは特殊なケースのようです。私の直感では、テーブルのサイズを実際に変更することなく、vtbl のオフセットを変更する必要があります。
明らかに、C++ 標準は特定の ABI を義務付けていないため、この質問はプラットフォーム固有のものですが、実際には、ABI を壊して維持するものはほとんどのコンパイラで似ています。私はGCCの振る舞いに興味がありますが、人々がより多くのコンパイラに答えることができれば、この質問はより有用になります;)