[Python-3000] Python/C++ question (original) (raw)

Giovanni Bajo rasky at develer.com
Tue Dec 12 12:04:28 CET 2006


Martin v. Löwis wrote:

To me, the killer feature would be that in C++ you can implement a smart pointer which takes care of incref/decref automatically for 99% of the code. This would be a terrific tool for the extension/core writers. Of course, this would also break in presence of binary-incompatible compilers, in particular when it relates to exception handling.

Details? Is that a problem, given that you can't compile Python core and extensions with different MSVC versions?

We could also avoid the smart pointer, but use cleanups anyway. For example:

struct ScopedIncRef { public: ScopedIncRef(PyObject *o) { Py_INCREF(o); } ~ScopedIncRef() { Py_DECREF(o); } };

#define WITH_INCREF(o) for (ScopedIncRef sc = ScopedIncRef(o),
bool stat = true;
stat;
stat = false)

Usage:

WITH_INCREF(o) // do something with o

or:

WITH_INCREF(o) { // do // something // with o }

A variadic version of this macro is also possible, of course:

WITH_INCREF(o1,o2,o3) // do something with them

(even if it requires using compiler-specific preprocessor extensions, available at least on MSVC and GCC).

Giovanni Bajo



More information about the Python-3000 mailing list