我有两个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
之前被销毁。你知道吗相关问题 更多 >
编程相关推荐