我有一个用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),你永远不会得到你的预期行为!看我的评论