我目前面临一个奇怪的问题,我想找到有关它发生的原因以及如何防止它的文档。
简单地说,我正在使用动态加载的库开发一个框架,这就是发生的事情:
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 编译的了解而言,如果这两个二进制文件是使用相同标头的不同版本编译的,这并不奇怪。然而事实并非如此。
我在使用虚拟纯方法和模板时大多会遇到这些问题。我想了解更多关于什么可能导致编译器以两种不同的方式编译这些对象的信息,即使它基于相同的头文件。