私は現在奇妙な問題に直面しており、なぜそれが起こるのか、そしてそれを防ぐ方法についての文書を見つけたいと思っています.
簡単に言うと、動的に読み込まれるライブラリを使用してフレームワークを開発していると、次のようになります。
void function() { Object* object = new Object(); call_dynamic_library(object); } // Dynamic library source: void dynamic_library_callback(Object* object) { // The following would crash: object->method(); // While the following would work: object = new Object(); object->method(); }
ポインターはもちろん同じで、問題はありません。ヘッダーも同じです。
C コンパイルに関する私の知識によると、2 つのバイナリが同じヘッダーの異なるバージョンでコンパイルされたとしても、これはおかしなことではありません。しかし、そうではありません。
ほとんどの場合、仮想純粋なメソッドとテンプレートを使用しているときにこれらの問題に遭遇します。同じヘッダーに基づいているにもかかわらず、コンパイラがこれらのオブジェクトを 2 つの異なる方法でコンパイルする原因について詳しく知りたいです。