[Python-3000] Python/C++ question (original) (raw)
Giovanni Bajo rasky at develer.com
Tue Dec 12 12:04:28 CET 2006
- Previous message: [Python-3000] Python/C++ question
- Next message: [Python-3000] Python/C++ question
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message: [Python-3000] Python/C++ question
- Next message: [Python-3000] Python/C++ question
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]