[Python-Dev] Re: Proposal: C API Macro to decref and set to NULL (original) (raw)
David Abrahams dave at boost-consulting.com
Fri Jul 16 06:33:19 CEST 2004
- Previous message: [Python-Dev] Re: Proposal: C API Macro to decref and set to NULL
- Next message: [Python-Dev] Re: Proposal: C API Macro to decref and set to NULL
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Guido van Rossum <guido at python.org> writes:
[David Abrahams, on the PyCLEAR 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 PyXDECREF() that are NULL-aware.
That's exactly the sort of case that covers up bugs in C++.
Our operator delete basically just ignores NULL values. When people write
delete p; p = 0;
It can cover up bugs where p is unintentionally getting deleted twice. It might still not be applicable here, though.
-- Dave Abrahams Boost Consulting http://www.boost-consulting.com
- Previous message: [Python-Dev] Re: Proposal: C API Macro to decref and set to NULL
- Next message: [Python-Dev] Re: Proposal: C API Macro to decref and set to NULL
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]