boost.python 暴露返回 vector<MyClass> 的函数
我正在用C++为Python写一个扩展模块,并且我使用了boost.python库。我想要暴露一个函数,这个函数返回一个vector<MyClass>
。不过我不太确定该怎么做,以及这在内存管理方面会和Python有什么关系。
我最初的想法是把MyClass
包装在shared_ptr
里,这样函数就会返回vector<shared_ptr<MyClass>>
。这样做有帮助吗?当shared_ptr<MyClass>
实例到达Python时会发生什么?它们会被释放吗?
所以我的问题是:我该如何暴露一个返回MyClass
实例的vector
的函数给Python,而不造成内存泄漏呢?
谢谢。
3 个回答
0
我遇到了差不多一样的问题:我需要一个用C++写的模块,返回一个自定义对象的列表。
虽然之前提到的 Boost.Python索引工具运行得很好,让我对Boost.Python更加喜欢,但最后我还是对代码进行了重构,让它返回一个boost::python::list类型的对象列表。这样在Python中的调用代码就更简洁了。
关于内存释放,除了索引工具外,还可以看看 manage_new_object 的返回值策略:
... 包装那些返回指向用new表达式分配的对象的C++函数,并期望调用者负责删除该对象...
我使用这个方法,效果相当不错。
2
看看 Boost.Python 的 索引工具。