我有一个EventManager用C++编写并暴露给Python的类.这就是我打算从Python端使用它的方式:
class Something:
def __init__(self):
EventManager.addEventHandler(FooEvent, self.onFooEvent)
def __del__(self):
EventManager.removeEventHandler(FooEvent, self.onFooEvent)
def onFooEvent(self, event):
pass
Run Code Online (Sandbox Code Playgroud)
(add-和remove-作为静态函数公开EventManager.)
上面代码的问题是回调是在boost::python::object实例中捕获的; 当我这样做时self.onFooEvent会增加引用计数self,这将阻止它被删除,因此析构函数永远不会被调用,因此事件处理程序永远不会被删除(除非在应用程序结束时).
该代码适用于没有self参数的函数(即自由或静态函数).我应该如何捕获Python函数对象,以便我不会增加它们的引用计数?我只需要对对象的弱引用.
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |