[PyQt] Guaranteed avoidance of C++ destructor call
Phil Thompson
phil at riverbankcomputing.com
Fri May 31 09:00:41 BST 2013
On Thu, 30 May 2013 23:27:04 +0100 (BST), John Lee <jjl at pobox.com> wrote:
> On Thu, 30 May 2013, Phil Thompson wrote:
>
>> On Thu, 30 May 2013 22:49:24 +0100 (BST), John Lee <jjl at pobox.com>
wrote:
>>> Hi
>>>
>>> Is it possible to guarantee that a C++ destructor of a QObject wrapped
>>> by
>>> PyQt is never called?
> [...]
>>> If I can't guarantee that from PyQt, can I write a simple sip wrapper
>>> that
>>> will achieve the same end, without copying and pasting the Qt code?
>>
>> sip.setdestroyonexit() might do what you want.
>
> Thanks, that sounds promising. It does trigger some followup questions:
>
>
> If I call sip.setdestroyonexit(False) before I construct any QProcess
> Python instances, can ~QProcess still be called for any reason, even if
I
> ensure that:
>
> 1. no Qt code deletes the C++ object, and
>
> 2. my code does not call sip.delete(), and
>
> 3. I create a module-global reference (my module) to the wrapping
> QtCore.QProcess Python instance which I never explicitly unbind (but for
> all I know might get unbound by some part of the PyQt/sip/Python
shutdown
> process)?
I would be surprised if the dtor was called in those circumstances.
> Other than the usual QObject parent/child hierarchy, are there any cases
> where Qt deletes things, that might surprise me?
Possible but unlikely.
> Since setdestroyonexit affects all cleanup and not only that of
QProcess:
> Are there other notable side effects that you or others know of that I
> might notice / be surprised by from calling sip.setdestroyonexit(False),
> as a result of the lack of the usual cleanup associated with particular
Qt
> classses? In other words, what cases are known / can be guessed at
where
> my program might start causing a leak of OS resources like temporary
> files, or badly terminated network connections, etc?
Calling it (which PyQt5 does automatically) makes a Python application
behave like a C++ one. So, potentially, it would suffer from the same
things - which of course would be application bugs.
Phil
More information about the PyQt
mailing list