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

Attachment: 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

Reply via email to