私は C++ python 拡張機能を作成していますが、PyObject でもある (つまり、PyObject_HEAD を持つ) 特定のクラスの仮想的に継承されたメソッドを (C++ から) 呼び出すたびに、SIGSEGV が発生します。
Python は C++ について何も知らないということをようやく思い出しました。案の定、GCC はオブジェクトの最初の 4 バイトに vtable ポインタを配置しています (PyObject_HEAD の最初のフィールドがオブジェクトのアドレスから 4 バイトオフセットされているため、わかります)。Python がオブジェクトを INCREF すると、実際には vtable ポインターが変更されます。
私の質問: これを修正するにはどうすればよいですか? 仮想メソッドを補助クラスに移動すれば解決しますが、敗北を認めているようです。その他の考え/経験はありますか?
(Python 2.7、mingw32/windows 7 の GCC 4.7.2)