
Originally Posted by
talk2amulya
in the destructor of parent class(QWidget), they are calling delete on children even when they r created on stack which should produce instantaneous crash.
it shouldnt even reach the compiler created code for removing the dialog object or would it?
Hmm... I guess it depends on the operating system. It might detect you are trying to delete a pointer that is in stack address space which is obviously going to lead to a crash anyway and might terminate your process. But I guess it doesn't have to at least I'm not aware of any C++ rule about what happens after you delete a non-heap pointer.
i tried something similar and although it sort off showed a weird crash at delete of child..but somehow it went ahead and executed the code further and then crashed later when the stack tried to delete the dialog object..how was this possible?
That's the variant I described earlier - a double delete caused by the compiler.
plus doesnt this show real proof that creating qobjects on stack with a parent should be a big no-no? i mean yeh, the case of hellodan survives this, but shouldnt doing this be discouraged?
It is discouraged
My opinion is that you can use any mechanism the language supports if you know what you are doing. You might even use "goto" if you want. And there is always a chance of shooting yourself in the foot and yet nobody prevents you from doing that. Consider this:
Object o;
delete &o;
Object o;
delete &o;
To copy to clipboard, switch view to plain text mode
or:
Object *o;
delete o; // with a bit of luck this will not always crash...
Object *o;
delete o; // with a bit of luck this will not always crash...
To copy to clipboard, switch view to plain text mode
I might offend some of the people here but in general I'm against "enlightened users" writing software. If they implement crashing code, that's their choice, they have been warned. Someone who knows the language well and knows the internal behaviour of computer systems will know when to create something on the heap and when to create it on the stack.
Bookmarks