python能否将对象的所有权传递给python回调函数?

2024-04-25 22:59:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在通过一个C++指针传递一个带有{{CD1>}函数的Python回调函数。这很好,但是如果我不随后删除C++代码中的指针,我会引入内存泄漏。在

我希望传递指向回调的指针,并让python的垃圾收集器处理对象的生存期。现在,如果我想保存传递给回调的对象,我必须进行深度复制。在

我已经看到了{a1},这类事情可能是用包的C++函数返回值,^ ^ }。是否可以对boost::python::call的参数执行类似的操作?在


Tags: 对象函数内存代码a1事情垃圾收集器
1条回答
网友
1楼 · 发布于 2024-04-25 22:59:47

^{}的工作方式是作为一个元函数类,它将参数转换为调用方必须负责的转换结果。在正常的通话策略下,它是在幕后使用的。我们只需自己显式地使用该元函数类:

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。如果您想更直接,可以跳过一些中间类型实例化,只使用:

^{pr2}$

我是通过猜测和核对得出上述结论的。看起来至少管用?在

相关问题 更多 >