我有两个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
自变量,并增加其引用计数?
答案 0 :(得分:3)
首先,Python不保证销毁顺序。如果您需要C ++的RAII之类的东西,请使用上下文管理器。
第二,如果您的C ++代码段错误,那是您的C ++代码的错误。通常,您应该针对那些如果使用不当甚至无法编译的代码。在这里,我建议您将shared_ptr<A>
传递到B
中,以确保A
在B
之前没有被破坏。