我正在编写一个 C++ python 扩展,每当我(从 C++)调用某个类的虚拟继承方法时,我一直在体验 SIGSEGV,该类也是一个 PyObject(即它有一个 PyObject_HEAD)。
我终于想起python对C++一无所知。果然,GCC 在我的对象的前 4 个字节中放置了一个 vtable 指针(你可以看出,因为 PyObject_HEAD 的第一个字段是从对象地址偏移 4 个字节)。当 python INCREFs 对象时,它实际上是在改变 vtable 指针。
我的问题:我应该怎么做才能解决这个问题?将虚方法移到子类中可以解决问题,但似乎认输了。还有其他想法/经验吗?
(mingw32 / windows 7 上的 Python 2.7、GCC 4.7.2)