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:
Aber alles was ich bekomme ist:
%Vor%Ich verwende nirgendwo Ausnahmen in meinem Code, also ist das, wonach ich suche, nur ein "Fix".
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).