[PyQt] sip: Member objects and GC
Phil Thompson
phil at riverbankcomputing.com
Thu Mar 8 22:28:19 GMT 2012
On Thu, 08 Mar 2012 23:14:49 +0100, Jonathan Kleinehellefort <jk at molb.org>
wrote:
> On Thu, 08 Mar 2012 10:03:46 +0000, Phil Thompson
> <phil at riverbankcomputing.com> wrote:
>> Even if there is a reference cycle the garbage collector should break
it
>> if it is being allowed to run. Any test should explicitly invoke it.
>
> Not sure if this applies here, but I think the Python GC will not call
> destructors on objects that are part of a reference cycle. So maybe the
> Python wrappers get collected but not the C++ objects.
No. The GC won't collect objects with __del__ methods.
>> Can you provide such a test that demonstrates the problem?
>
> You can already see it in the original test I put up on my webserver.
> But I updated it to make it more explicit:
>
> http://molb.org/~jk/siptest2.tar.gz
>
> The C++ objects have destructors that should print stuff, but that never
> happens.
...because the GC isn't being run. Import the gc module and run it
explicitly.
> Another thing: it would be nice if sipKeepReference() would appear in
the
> docs.
It's not part of the public API.
Phil
More information about the PyQt
mailing list