Wie werden inkompatible throw-Spezifizierer mit impliziten virtuellen Destruktoren korrekt aufgelöst?

8

Dieser Code compiliert nicht:

%Vor%

Der Fehler ist:

%Vor%

Ich habe keine Erfahrung mit der Verwendung von Ausnahmen, aber ich denke, dass das Problem darin besteht, dass der QString destructor keine Ausnahmebestimmung hat und daher die implizit erzeugte Derived::~Derived auch keine Ausnahmebestimmung hat. Dies ist nicht kompatibel mit dem impliziten Base::~Base , das noexcept(true) ist.

Wenn ich das QString ausschließe oder es durch eine Klasse mit noexcept(true) (zB std::string ) ersetze, kompiliert der Code.

Zuerst dachte ich, dass ich das lösen könnte, indem ich beide Destruktoren als noexcept(false) deklariere:

%Vor%

Aber alles was ich bekomme ist:

%Vor%

Ich verwende nirgendwo Ausnahmen in meinem Code, also ist das, wonach ich suche, nur ein "Fix".

    
Martin Drozdik 24.06.2013, 10:22
quelle

1 Antwort

1

Sie scheinen von Ihrem QString abgespritzt zu sein, der sich selbst in dtor eingab.

Ich sehe keine einfachen Auswege (abgesehen von der Verwendung einer vernünftigen Zeichenkette): Sie können sich im Wind beugen, indem Sie Ihre Basisklasse dtor als noexcept (falsch) angeben, oder Abgeleitetes dtor explizit machen und noexcept (true) ausdrücken. (Ich bin mir nicht sicher, ob etwas Gutes passiert, wenn ~ QString tatsächlich geworfen wird, aber das führt zum ersten Fluchtweg).

    
Balog Pal 24.06.2013, 10:40
quelle

Tags und Links