加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – Boost.Python:回调类函数

发布时间:2020-12-16 03:12:52 所属栏目:百科 来源:网络整理
导读:我有一个用C编写并暴露给 Python的EventManager类.这是我打算从Python方面使用的方法: class Something: def __init__(self): EventManager.addEventHandler(FooEvent,self.onFooEvent) def __del__(self): EventManager.removeEventHandler(FooEvent,self.
我有一个用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),你永远不会得到你的预期行为!看我的评论

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读