2024-04-25 22:59:47 发布
网友
我现在通过一个C++指针传递一个带有{{CD1>}函数的Python回调函数。这很好,但是如果我不随后删除C++代码中的指针,我会引入内存泄漏。在
我希望传递指向回调的指针,并让python的垃圾收集器处理对象的生存期。现在,如果我想保存传递给回调的对象,我必须进行深度复制。在
我已经看到了{a1},这类事情可能是用包的C++函数返回值,^ ^ }。是否可以对boost::python::call的参数执行类似的操作?在
boost::python::call
^{}的工作方式是作为一个元函数类,它将参数转换为调用方必须负责的转换结果。在正常的通话策略下,它是在幕后使用的。我们只需自己显式地使用该元函数类:
struct Foo { X* x = ...; void give_up_x(py::object callback) { py::manage_new_object::apply<X*>::type wrapper; callback(py::handle<>{wrapper(x)}); } };
您需要py::handle<>,因为包装器返回的是PyObject*,而不是py::object。如果您想更直接,可以跳过一些中间类型实例化,只使用:
py::handle<>
PyObject*
py::object
我是通过猜测和核对得出上述结论的。看起来至少管用?在
^{} 的工作方式是作为一个元函数类,它将参数转换为调用方必须负责的转换结果。在正常的通话策略下,它是在幕后使用的。我们只需自己显式地使用该元函数类:
您需要
^{pr2}$py::handle<>
,因为包装器返回的是PyObject*
,而不是py::object
。如果您想更直接,可以跳过一些中间类型实例化,只使用:我是通过猜测和核对得出上述结论的。看起来至少管用?在
相关问题 更多 >
编程相关推荐