[Interest] C'tor member initialisation with 'this'

Giuseppe D'Angelo dangelog at gmail.com
Fri Jan 10 20:34:46 CET 2014


On 10 January 2014 19:09, Frank Hemer <frank at hemer.org> wrote:
> On Friday 10 January 2014 21:58:13 Constantin Makshin wrote:
>> No, it won't. 'this' is just a pointer and copying it anywhere (except a
>> free-memory-in-destructor kind of smartpointer, of course, but using these
>> to store a pointer to the parent object is a weird idea anyway) doesn't
>> affect the object's lifetime in any way; neither does the object's
>> destructor gets called when a pointer to it is destroyed by going out of
>> scope or any other means.
>
> Well, I was confused by the QObject d'tor doc stating:
>
> Warning: All child objects are deleted. If any of these objects are on the
> stack or global, sooner or later your program will crash. We do not recommend
> holding pointers to child objects from outside the parent. If you still do,
> the destroyed() signal gives you an opportunity to detect when an object is
> destroyed.
>
> And the networkMgr is on the stack.

It's not "on the stack"; it's a member. This means it will be properly
destroyed at the end of the QtSoapHttpTransport's destructor, which
will run before QObject's destructor. The destruction code of QNAM
(actually, of its QObject subobject) will remove it from the parent
children list. So when the QObject destructor (for the QObject
sub-object of QtSoapHttpTransport), it won't double delete anything.

-- 
Giuseppe D'Angelo



More information about the Interest mailing list