[Python-3000] Python/C++ question

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
     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)


    // do something with o


   // do
   // something
   // with o

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

    // 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