微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – Boost.Python:回调类函数

我有一个用C编写并暴露给 Python的EventManager类.这是我打算从Python方面使用的方法
class Something:
    def __init__(self):
        EventManager.addEventHandler(FooEvent,self.onFooEvent)
    def __del__(self):
        EventManager.removeEventHandler(FooEvent,self.onFooEvent)
    def onFooEvent(self,event):
        pass

(Add-和remove-作为EventManager的静态功能).

上述代码的问题是在boost :: python :: object实例中捕获回调;当我做self.onFooEvent这些将增加self的引用计数,这将阻止它被删除,所以析构函数永远不会被调用,所以事件处理程序永远不会被删除(除了应用程序的结尾).

代码适用于没有自变量(即自由或静态功能)的函数.我应该如何捕获Python函数对象,这样我不会增加引用计数?我只需要对对象的弱引用.

解决方法

没有weakref.ref(self.onFooEvent),你永远不会得到你的预期行为!看我的评论

原文地址:https://www.jb51.cc/c/112206.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐