#include #include struct A { A() { qDebug() << "\tA()"; } virtual ~A() { qDebug() << "\t~A()"; } }; struct B { virtual ~B() { } }; int main(int argc, char * argv[]) { Q_UNUSED(argc); Q_UNUSED(argv); qDebug() << "Failed dynamic cast from a into b; destroy b before a:"; qDebug() << "{"; { QSharedPointer a(new A); QSharedPointer b = a.dynamicCast(); // failed dynamic cast b.clear(); a.clear(); } qDebug() << "}"; qDebug() << "\nFailed dynamic cast from a into b; destroy a before b:"; qDebug() << "{"; { QSharedPointer a(new A); QSharedPointer b = a.dynamicCast(); // failed dynamic cast a.clear(); b.clear(); } qDebug() << "}"; return 0; }