执行销毁令

Enforce destruction order

我有两个 C++ 类,例如假设它们是

class A
{
};

class B
{
};

然后我用 SWIG 包装它们以创建 Python 绑定

%include "A.h"
%include "B.h"
...etc

在Python方面,我将这些用作

a = A()
b = B()

我想以某种方式强制销毁顺序因此是 ~B() 然后 ~A()。如果以其他顺序调用它们,~B() 将由于悬空指针而出现段错误。

有什么方法可以修改 SWIG 接口以强制首先销毁 B?比如只允许在上下文管理器中使用它?添加对 A 对象的引用?在 B 的构造函数中获取一个 A 参数并增加它的引用计数?

首先,Python不保证销毁顺序。如果您需要 C++ 的 RAII 之类的东西,请为此使用上下文管理器。

其次,如果您的 C++ 代码出现段错误,那是您的 C++ 代码有问题。通常,您应该针对那些如果使用不当甚至无法编译的代码。在这里,我建议您将 shared_ptr<A> 传递给 B 以确保 A 不会在 B.

之前销毁