我有两个 C++ 类,例如假设是
class A
{
};
class B
{
};
然后我用 SWIG 包装它们以创建 Python 绑定(bind)
%include "A.h"
%include "B.h"
...etc
在 Python 方面,我将它们用作
a = A()
b = B()
我想以某种方式强制销毁顺序为 ~B()
然后是 ~A()
。如果以其他顺序调用它们,~B()
将由于悬空指针而出现段错误。
有什么方法可以修改 SWIG 接口(interface)以强制首先销毁 B
吗?就像只允许在上下文管理器中使用它?添加对 A
对象的引用?在 B
的构造函数中采用 A
参数并添加其引用计数增量?
最佳答案
首先,Python 不保证销毁顺序。如果您需要 C++ 的 RAII 之类的东西,请使用上下文管理器。
其次,如果您的 C++ 代码出现段错误,那是您的 C++ 代码的错误。一般来说,您应该瞄准如果使用不当甚至无法编译的代码。在这里,我建议您通过shared_ptr<A>
进入B
以确保 A
在B
之前没有被破坏.
关于python - 执行销毁令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580776/