仮想を含む他の変更が派生クラスで行われた場合でも、クラスのビューの ABI は安定したままですか?
つまり、インターフェイスInterfaceA
(多くの純粋仮想関数を持つ抽象クラス) とDerivedB
それを継承するクラスがあるとします。を取る関数を持つライブラリを作成しますInterfaceA *
。私が知りたいのは、インターフェイス自体が変更されない限り、インターフェイスがバイナリ互換性を維持しているかどうかです。
明らかに、変更した場合InterfaceA
、コードがバイナリ互換であることは期待できません。ただし、単に変更するとどうなるでしょうかDerivedB
。つまり、さらにインターフェイスを継承したり、他の仮想関数を追加したりします。極端な言い方をすると、 を定義する別のクラスから多重継承しますInterfaceA
。InterfaceA
これらすべての変更にもかかわらず、バイナリ互換性は維持されますか?
今までの私の仮定と経験は、互換性があるということです。これの確認(または互換性がない場合は反論)を探しているだけです。
注: 動的型付けやその他のキャストについては気にしません。インターフェイス関数自体についてのみ気にします。
また、注意: 使用されているコンパイラのバージョンは、全体として ABI が安定していると想定してください。メジャー バージョンの変更はありません。