seltsam - mysqls sql :: SQLException wird nicht von ihrem Typ erfasst, sondern als std :: exception abgefangen und erfolgreich zurückgespielt

Ich benutze MySQL C ++ Connector mit diesem (etwas vereinfachten) Code.

try
{
    statement->setString(1, word);
    statement->executeUpdate();
}
catch( sql::SQLException& e )
{
    // I don't get here
    return sqlerrno_to_error_code( e.getErrorCode() );
}
catch( std::exception& e )
{
    // I do get here and the cast works
    sql::SQLException& sqle = (sql::SQLException&) e;
    return sqlerrno_to_error_code( sqle.getErrorCode() );
}

Der Konnektor soll die sql :: SQLException auslösen, die von std :: exception abgeleitet ist und einige zusätzliche Methoden wie hatgetErrorCode().

Die geworfene Ausnahme wird in der Sekunde abgefangencatch Block, kann aber umgewandelt (und verwendet werden als)sql::SQLException erfolgreich.

Noch seltsamer ist, dass ein ähnlicher Code in einer anderen ausführbaren Datei abfängtsql::SQLException wie erwartet. Der Unterschied besteht darin, dass sich das erste Objekt in einem gemeinsam genutzten Objekt (.so) befindet, mit dem geladen wirddlopen().

RHEL 5.7 32 Bit, gcc 4.1.2

Antworten auf die Frage(1)

Ihre Antwort auf die Frage