执行销毁令
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
.
之前销毁
我有两个 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
.