如果我在take_ownership
中使用pybind11
返回值策略,并且调用了一个返回std::vector<Dog>
的函数,那么如何确保向量及其内容析构函数被称为?与python
客户端代码中的范围超出范围有什么关系?
答案 0 :(得分:1)
当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.del
从不显式销毁对象;但是,当它们变得不可访问时,它们可能会被垃圾回收。 [...]
特定于pybind
,这是删除时调用的分配位: