torutkのブログ

ソフトウェア・エンジニアのブログ

C++で動的リンクライブラリを使う際、どの変更まで利用側コードを再コンパイルせずに対応可能か?

調査メモ

  • 仮想メンバ関数の追加は、ヘッダーファイルにおける宣言順番によって異なる

public:
virtual int vmethod1();
virtual int vmethod2(); // この追加はOK

public:
virtual int vmethod2(); // この追加はNG
virtual int vmethod1();
仮想メンバ関数は、検索用テーブル(vtbl)のインデックスでアクセスすると思われるので、
既存のインデックスが変わらないような追加であれば可能。

  • 仮想メンバ関数がvtblにどの順序で格納されているかは(多分)コンパイラ依存だが、GCC 2.95.3およびSun Forte6 C++では、アクセス修飾子によらず宣言順になる模様。