pybind11 - 你如何调用析构函数或者什么时候从pybind11中的python自动调用?
问题描述
如果我在 中使用take_ownership
返回值策略pybind11
,并且我调用了一个返回 a 的函数,std::vector<Dog>
我如何确保调用向量及其内容的析构函数?它与超出python
客户端代码范围有关吗?
解决方案
当 Python 垃圾收集对象(并调用 CPython API 挂钩)时,事物将被破坏。
有关 Python 文档,请参见此处:
https://docs.python.org/3.7/reference/datamodel.html#objects-values-and-types https://docs.python.org/3.7/reference/datamodel.html#object。德尔
对象永远不会被显式销毁;但是,当它们变得无法访问时,它们可能会被垃圾收集。[...]
具体到pybind
,这里是删除时调用的释放位:
- https://github.com/pybind/pybind11/blob/25abf7e/include/pybind11/detail/class.h#L389
- https://github.com/pybind/pybind11/blob/25abf7e/include/pybind11/detail/class.h#L346
- https://github.com/pybind/pybind11/blob/25abf7e/include/pybind11/detail/class.h#L327
- https://github.com/pybind/pybind11/blob/25abf7e/include/pybind11/pybind11.h#L1339
推荐阅读
- html - 展开-折叠菜单建议
- flutter - 是否可以在颤动中提供开始随机数序列的种子?
- python - 熊猫线性回归模块问题
- laravel - 如何通过选择 Laravel 联系表单中的复选框来切换目标邮件地址
- dataframe - 如果不存在,则将值替换为先前的值
- python-3.x - 列表理解中的 if 子句在 pdb 中给出未定义的名称错误,但在解释器中没有
- javascript - 如何在js ES6中的破坏结构中传递多个参数
- swift - 使用 ForEach 循环在 Swift 中绘制具有不同颜色的同心圆
- javascript - 如何在 VueJS 中发出事件?
- flutter - 在 null 上调用了方法“[]”