执行销毁令

时间:2019-04-08 19:50:07

标签: python c++ swig

我有两个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对象的引用?在A的构造函数中使用B自变量,并增加其引用计数?

1 个答案:

答案 0 :(得分:3)

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

第二,如果您的C ++代码段错误,那是您的C ++代码的错误。通常,您应该针对那些如果使用不当甚至无法编译的代码。在这里,我建议您将shared_ptr<A>传递到B中,以确保AB之前没有被破坏。