繁体   English   中英

boost.python公开返回vector的函数<MyClass>

[英]boost.python expose function that returns vector<MyClass>

我正在用C ++编写Python扩展模块,我正在使用boost.python。 我想公开一个返回vector<MyClass>的函数。 我不确定如何做到这一点以及它将如何与Python WRT内存管理交互。

我的第一个想法是在shared_ptr包装MyClass ,因此该函数将返回vector<shared_ptr<MyClass>> 这会有帮助吗? shared_ptr<MyClass>实例到达Python域时会发生什么? 他们会被释放吗?

所以我的问题是:如何在不泄漏内存的情况下公开一个将MyClass实例vector返回给Python的函数?

谢谢。

如果你使用vector<MyClass>那么vector中的那些实例显然是(由于向量内部使用动态分配的内存)堆栈分配。 它与vector<MyClass*>不同,它本质上是动态分配的MyClass实例的向量。 在这种情况下, vector<shared_ptr<MyClass> >是更好的解决方案。

Boost Python和智能指针可以很好地协同工作,这可以在这个例子中看到。

要公开vectorlist使用索引接口,可在此处查看

我遇到了更多相同的问题:我必须使用C ++编写的模块返回自定义对象的向量。

虽然(如上所述) Boost.Python索引套件运行良好并使我更像Boost.Python,我最终重构了这些东西,所以这就是返回我的对象​​的boost :: python :: list。 这使得Python中的调用代码更加清晰。

关于释放内存,除索引套件外,还要看一下manage_new_object的返回值策略:

...包装C ++函数,它返回一个指向使用new-expression分配的对象的指针,并期望调用者负责删除该对象...

我使用它,它运作得相当好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM