[PyQt] References returned from C++

Phil Thompson phil at riverbankcomputing.com
Sun Jun 22 12:41:46 BST 2008


On Sun, 22 Jun 2008 12:53:41 +0200, "Arve Knudsen" <arve.knudsen at gmail.com>
wrote:
> How does one normally treat references returned by SIP-wrapped C++
> objects? I just determined a segmentation fault in my program resulted
> from an object first being obtained as a reference (in the C++ sense)
> from a C++ method, and then destroyed with the parent object. Does one
> normally keep in mind that the object dies implicitly with its C++
> parent, or is there a way to have SIP give you copies rather than
> borrowed references?

I will probably change SIP to make a copy when the reference is const. I
think this fixes most of the problem areas although it does introduce an
incompatibility.

For example...

    const Status &status = foo->status();

    while (!status.finished)
        foo->process();

...with the planned change a directly translated Python version would no
longer work. Instead you would have to move the call to status() to be
inside the loop...

    while not foo.status().finished:
        foo.process()

While I don't think there is anything in PyQt that would be affected by
this, SIP is used for much more than just PyQt.

Phil



More information about the PyQt mailing list