qt - Ambiguous destructor for QObject? -


qt reference qobject destructor says:

all signals , object automatically disconnected, , any pending posted events object removed event queue. however, safer use deletelater() rather deleting qobject subclass directly.

...

warning: deleting qobject while pending events waiting delivered can cause crash. must not delete qobject directly if exists in different thread 1 executing. use deletelater() instead, cause event loop delete object after pending events have been delivered it.

notice bold lines in above section.

so question is: pending posted events removed event queue or not?

warning: deleting qobject while pending events waiting delivered can cause crash. must not delete qobject directly if exists in different thread 1 executing.

you're focussing on first statement of sentence , ignoring second. situation concerns deletion of object exists in different thread - (different thread affinity).

if, example you're running on main (gui) thread , have object in 2nd thread, deleting other object main thread cause crash.

if object you're deleting running in thread being deleted, yes, pending posted events object removed event queue.

let's think what's going on.

when object calls signal, if receiver of object in same thread callee, function called (assuming connection type automatic, or direct).

if receiver of object has different thread affinity, auto connection results in queued-connection; rather calling function directly, event posted event queue of thread receiving object.

when comes deleting object, if we're calling delete different thread, can't access other thread's event queue remove pending events. more importantly, it's not thread safe , may result in crash.


Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - .htaccess mod_rewrite for dynamic url which has domain names -

Website Login Issue developed in magento -