我有两个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
参数并添加其引用计数的增量?
首先,Python不保证销毁订单。如果您需要类似C ++的RAII,请使用上下文管理器。
其次,如果您的C ++代码段错误,那就是您的C ++代码的错误。通常,如果使用不正确,您应该针对甚至不编译的代码。在这里,我建议你将shared_ptr<A>
传递到B
,以确保在A
之前B
没有被摧毁。