我正在用 C++ 为 Python 编写一个扩展模块,我正在使用 boost.python。我想公开一个返回 vector<MyClass>
的函数.我不确定如何执行此操作以及它将如何与 Python WRT 内存管理交互。
我的第一个想法是包装 MyClass
在 shared_ptr
, 因此该函数将返回 vector<shared_ptr<MyClass>>
.这会有帮助吗? shared_ptr<MyClass>
时会发生什么实例进入 Python 领域?他们会被释放吗?
所以我的问题是:如何公开一个返回 vector
的函数的 MyClass
实例到 Python 而不会泄漏内存?
谢谢。
最佳答案
如果您使用 vector<MyClass>
vector
中的那些实例显然(有点,因为 vector 在内部使用动态分配的内存)堆栈分配。它与 vector<MyClass*>
不同这本质上是一个动态分配的 vector MyClass
实例。在这种情况下,一个 vector<shared_ptr<MyClass> >
是更好的解决方案。
Boost Python 和智能指针可以很好地协同工作,可以在this 中看到。示例。
暴露vector
s 或 list
s使用索引接口(interface),可以查看here.
关于c++ - boost.python 公开返回 vector<MyClass> 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268496/