【发布时间】:2019-04-08 19:50:07
【问题描述】:
我有两个 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 参数并增加其引用计数?
【问题讨论】:
-
如果您的类设计要求以特定顺序销毁对象,那么您的类设计是错误的。
-
如果您创建一个没有
A的B或一个没有B的A会发生什么?你应该设计你的类,这样这样的事情就不会发生。 -
我不确定 Ulrich 所说的上下文管理器是什么意思,所以这可能是同一个想法。创建一个新类 AB,让 AB 处理 C++ 代码中 A 和 B 的创建和销毁。只将 AB 传递给 Python。
-
@john 这可能是对或错,但一般来说可能是无用的建议。
-
@ZanLynx:术语“上下文管理器”是一个 Python 术语。基本上,它保证一段代码由两个操作构成,一个在进入,一个在退出,非常类似于例如使用 RAII 的
scoped_lock。