[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-devel
Subject:    Re: Not used QPointers showing modal dialogs via exec() - No crash
From:       Thomas_Lübking <thomas.luebking () gmail ! com>
Date:       2013-11-11 19:14:54
Message-ID: 3f6e3694-ee20-4ce1-a074-c7a497b2e897 () gmail ! com
[Download RAW message or body]

On Montag, 11. November 2013 19:42:13 CEST, Kevin Krammer wrote:

> If anything, D-Bus, timer, whatever, causes deletion of the 
> dialog's parent, 
> in this case KMinesMainWindow, then it will delete its child QObject.

If a QObject with children on the stack gets deleted, you're in trouble anyway, see \
the big fat warning in the QObject API about this.

> When the C++ code of the functions cleans up the stack, it will 
> at least also 
> invoke the dialog's destructor.

This however would bite you if the deconstructor attempts to operate on the deleted \
parent()


Long story short:
-----------------
if you cannot ressonably assume -or even better: guarantee- that the environment is \
gonna survive the nested eventloop:

a) create the object with nested loop on the heap and assign it a qpointer
b) check whether the nested pointer is NULL after the nested loop has quit
c) if you need to perform more stuff on "this" after the nested loop has exited, \
assign a qpointer to "this" before entering the loop and check it afterwards as well \
(for odds are good that "this" has gone as well) d) actually better guard any \
("toplevel") pointers that you intend to access after a nested event loop.

Alternatively under this (unsafe state) condition, just don't use a nested eventloop.

Cheers,
Thomas

> > Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic