C++ pybind11::keep_的反向API是什么?

C++ pybind11::keep_的反向API是什么?,c++,pybind11,C++,Pybind11,使用pybind11::keep_alive构造,可以确保附加到列表的对象的生存时间至少与列表本身的生存时间相同 引用文件 考虑以下示例:这里,list append操作的绑定代码将新添加元素的生存期绑定到基础容器: py::class_m(“列表”) .def(“append”,&List::append,py::keep_alive()); 类似地,如何在removeapi上解开附加对象的生存期 py::class_m(“列表”) .def(“append”,&List::append,p

使用pybind11::keep_alive构造,可以确保附加到列表的对象的生存时间至少与列表本身的生存时间相同

引用文件

考虑以下示例:这里,list append操作的绑定代码将新添加元素的生存期绑定到基础容器:

py::class_m(“列表”)
.def(“append”,&List::append,py::keep_alive());
类似地,如何在removeapi上解开附加对象的生存期

py::class_m(“列表”)
.def(“append”,&List::append,py::keep_alive())
.def(“删除”,&List::删除,…/*这里是什么?*/);
为了澄清这一点,
remove
API将要删除的元素作为参数,并从列表中删除该元素。因此,在移除成功后将移除对象的生存期绑定到列表是没有意义的

下面的方法可以减少python对象上的ref计数,如下所示

.def(“删除”,[](列表和列表,py::object obj){
list.remove(obj.cast());
obj.dec_ref();
});
不起作用,因为在垃圾收集List python对象时,pybind11将再次尝试减少引用计数

有没有一种解决方案可以与pybind11::keep_相反

提前谢谢


将C++17与pybind11 v2.6.1一起使用。

浏览pybind11问题后,我发现以下功能请求解决了一个类似于我所描述的问题