gpt4 book ai didi

c++ - 我认为 python 正在覆盖我的 vtable(c++ 扩展)

转载 作者:太空宇宙 更新时间:2023-11-04 14:01:42 25 4
gpt4 key购买 nike

我正在编写一个 C++ python 扩展,每当我(从 C++)调用某个类的虚拟继承方法时,我一直遇到 SIGSEGV,该类也是一个 PyObject(即它有一个 PyObject_HEAD)。

我终于想起来了,python对C++一窍不通。果然,GCC 在我的对象的前 4 个字节中放置了一个 vtable 指针(你可以看出,因为 PyObject_HEAD 的第一个字段从对象的地址偏移了 4 个字节)。当 python INCREFs 对象时,它实际上是在改变 vtable 指针。

我的问题:我应该怎么做才能解决这个问题?将虚拟方法移到子类中可以解决它,但似乎承认失败。还有其他想法/经历吗?

(Python 2.7,GCC 4.7.2 在 mingw32/windows 7 上)

最佳答案

Python 不了解 C++,但它了解结构。因此,让 Python 调用创建结构的纯 C 函数。相反,该结构有一个指向 C++ 对象的指针。这样 Python 看到的是一个纯 C 接口(interface),但是 C 接口(interface)的实现创建了一个私有(private)内部对象。

我们实际上在我的一个项目中这样做。它可以工作,而且非常便携。

关于c++ - 我认为 python 正在覆盖我的 vtable(c++ 扩展),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19072787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com