python - 执行销毁令

标签 python c++ swig

我有两个 C++ 类,例如假设是

class A
{
};

class B
{
};

然后我用 SWIG 包装它们以创建 Python 绑定(bind)

%include "A.h"
%include "B.h"
...etc

在 Python 方面,我将它们用作

a = A()
b = B()

我想以某种方式强制销毁顺序为 ~B() 然后是 ~A()。如果以其他顺序调用它们,~B() 将由于悬空指针而出现段错误。

有什么方法可以修改 SWIG 接口(interface)以强制首先销毁 B 吗?就像只允许在上下文管理器中使用它?添加对 A 对象的引用?在 B 的构造函数中采用 A 参数并添加其引用计数增量?

最佳答案

首先,Python 不保证销毁顺序。如果您需要 C++ 的 RAII 之类的东西,请使用上下文管理器。

其次,如果您的 C++ 代码出现段错误,那是您的 C++ 代码的错误。一般来说,您应该瞄准如果使用不当甚至无法编译的代码。在这里,我建议您通过shared_ptr<A>进入B以确保 AB之前没有被破坏.

关于python - 执行销毁令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580776/

相关文章:

python - 将手工包装方法添加到 Swig 输出

python - QtGui.QMessageBox.information 和自定义

python - pbkdf2 和哈希比较

c++ - 排队循环中的节点自引用

c++ - GetOpenFileName 函数未打开对话框

c++ - 安装 CUDA C++ 库?

c++ - [swig-JavaScript] 是否支持 std::vector<std::string>* 作为输出?

Python:快速/高效实现 Kullback Leibler 散度进行多重分布计算

python - 如何在Python中测试单元格坐标以更改数据?

c++ - SWIG:公共(public)函数中使用的私有(private) typedef