执行销毁订单

问题描述 投票:3回答:1

我有两个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++ swig
1个回答
3
投票

首先,Python不保证销毁订单。如果您需要类似C ++的RAII,请使用上下文管理器。

其次,如果您的C ++代码段错误,那就是您的C ++代码的错误。通常,如果使用不正确,您应该针对甚至不编译的代码。在这里,我建议你将shared_ptr<A>传递到B,以确保在A之前B没有被摧毁。

© www.soinside.com 2019 - 2024. All rights reserved.