On domingo, 19 de agosto de 2012 17.18.34, Till Oliver Knoll wrote: > Wow - I did not even know that it was legal C++ to explicitly call a > d'tor, as in: > > SomeObject someObject; > > someObject.~SomeObject(); > > (at least my gcc on Mac compiles this without complaint. And as long as > you don't release any resources twice inside the d'tor - or simply have > a qDebug("D'tor called.") or something in the d'tor - nothing bad > happens: the d'tor is indeed simply called twice (once explicitly, once > the automatic variable goes out of scope).
Yes, it's perfectly valid. The standard will tell you that the destructor running twice is undefined behaviour though. > However it never occured to me to actually try such a thing. I mean, > what would be a practical scenario where one wanted to explicitly call a > d'tor? So clean up resources before the actual object gets destroyed > (assuming that the code inside the d'tor would take care not to delete > resources twice, such that it would be okay to call a d'tor several times)? QVector, QList. And here's the question: without looking at the sources for those classes, how do you call the constructor? :-) Hint: it's not someObject.SomeObject() because that doesn't compile. This is perfectly valid: someObject.SomeObject::SomeObject::SomeObject::SomeObject::someFunc() Once you figure out how to call the constructor, you'll also learn another way to call the destructor. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center Intel Sweden AB - Registration Number: 556189-6027 Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest