如果我包装一个 C 类:
from ._ffi import ffi, lib
class MyClass(object):
def __init__(self):
self._c_class = lib.MyClass_create()
确保的最佳实践是什么lib.MyClass_destroy(…)
叫做?
Does cffi
在对象周围有某种包装器,当 Python 对象被 GC 时,它们会调用析构函数,例如:
my_obj = managed(lib.MyClass_create(), destructor=lib.MyClass_destroy)
或者析构函数逻辑应该在类中__del__
?就像是:
class MyClass(object):
def __del__(self):
if self._c_class is not None:
lib.MyClass_destroy(self._c_class)
这里的最佳实践是什么?
看起来像ffi.gc()
是要走的路。这是我写的小包装器,它也执行 post-mallocNULL
check:
def managed(create, args, free):
o = create(*args)
if o == ffi.NULL:
raise MemoryError("%s could not allocate memory" %(create.__name__, ))
return ffi.gc(o, free)
例如:
c_class = managed(lib.MyClass_create, ("some_arg", 42),
lib.MyClass_destroy)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)