[Python-Dev] Re: Proposal: C API Macro to decref and set to NULL
Guido van Rossum
guido at python.org
Fri Jul 16 04:37:21 CEST 2004
> [David Abrahams, on the Py_CLEAR macro]
> > FWIW our experience in the C++ community suggests that
> > deallocate-and-NULL tends to hide bugs. In general we prefer to use
> > deallocate-and-fill-pointer-with-garbage. I'm not sure if the
> > experience translates here, of course.
[Tim]
> I don't think so. Along with the macro, Jim checked in a nice
> explanation in the Extending and Embedding manual. A decref can cause
> anything to happen if the decref'ed containee is now trash, including
> fresh accesses to the container object holding the now-trash containee
> that was decrefed. If the container's pointer to the containee isn't
> NULLed out first, the entire implementation of the container has to be
> aware that this particular containee may hold an insane value. Ditto
> if garbage is put in the pointer. Ditto for NULL too, but NULL is a
> single, obvious, and easy-to-test way to say "and this containee no
> longer exists". This isn't really so much about deallocation as about
> horrid side effects triggered by deallocation.
Plus, in many cases NULL is *already* an expected value.
We even have macros like Py_XDECREF() that are NULL-aware.
--Guido van Rossum (home page: http://www.python.org/~guido/)
--i6G2WKR31130.1089945140/guido.python.org--
More information about the Python-Dev
mailing list