I'd like to propose that if an extension class has a
__cinit__() member, it must have a __dealloc__()
member. The compiler should raise an error
or at least a warning.
I realize this will annoy a few people in the odd case or
two where one isn't necessary, but the problem is
that it is all too easy to write code like this:
cdef class foo:
cdef double *x
def __init__(self, whatever):
stuff
def __cinit__(self, whatver):
self.x = <double *>calloc(...)
def __deallocate__(self):
free(self.x)
Such a class works perfectly, until you notice the memory
leak. (Because, __deallocate__() isn't a special member
even though the name is very suggestive, so free() never
gets called.)
I've done this twice now. The first one required several hours
of debugging and a bicycle ride in the rain to reboot my
thrashing computer at work. The second one took less time,
but it's still a very easy mistake to make and an annoying one
to find.
People might also think of __cdel__/__cinit__ by analogy with
python's __del__/__init__.
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev