[C++-sig] Re: Pyste: Virtual class wrapper doesn't refcount object

David Abrahams dave at boost-consulting.com
Fri Apr 2 00:20:52 CEST 2004


Dan Halbert <halbert at bbn.com> writes:

> In Pyste from the 1.31.0 release:
>
> If Pyste finds any virtual methods in a class it is wrapping (if I
> understand correctly), it generates a class wrapper for that class
> that looks something like this:
>
>
>     struct VMClass_Wrapper : VMClass_Wrapper
>     {
>         (PyObject* self_):
>             VMClass(), self(self_) {}
>
>         void f(long int p0) {
>             call_method< void >(self, "f", p0);
> 	}
>
>         PyObject* self;
>     };
>
>
> Note that the self object is not properly reference-counted. It seems
> to me it should be

No, Pyste generates correct code for this case.  See
http://www.boost.org/libs/python/doc/tutorial/doc/class_virtual_functions.html.

The Python class already owns the C++ class. That would create an
ownership cycle.

> since it's held by the struct, and can disappear from scope in the
> Python code, and so would go out of existence.
>
> I had just such an error when using this class in a callback situation:
>
>    registerMyCallback(VMClass(), ...)  # uses an anonymous VMClass() object

I'm not sure what that's doing, but your problem lies elsewhere.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com





More information about the Cplusplus-sig mailing list