Throw struct 2669
-
Hallo zusammen,
ich sehe gerade wahrscheinlich den Wald vor lauter Bäumen nicht mehr.
Ich habe folgendes Stück Code:struct wexception : virtual exception { explicit wexception(const wchar_t* msg) : exception(converter.to_bytes(msg).c_str()) { //exception(converter.to_bytes(msg).c_str()); } wstring what_utf8() { return converter.from_bytes(what()); } private: wstring_convert<codecvt_utf8_utf16<wchar_t>> converter; }; .... try { throw wexception(L""); //Hier ist der C2280 } catch(wexception &wex) { }
Fehler:
Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
Fehler C2280 'wexception::wexception(const wexception &)': attempting to reference a deleted functionSoll ja also heißen, dass die Struktur nicht mehr da sein könnte wenn ich aus dem try Block fliege richtig?
Mache ich eine Klasse aus meiner Abgeleiteten' und setz beim throw ein new davor, dann schreit mein ReSharper "Some control paths may leak this resource acquisition".
Ich denke mal die meinen damit, dass ich im catch ein delete machen müsste?! Aber das macht mit einer normales exception doch auch keine Sau(?).Wie könnte ich das hier best practice umsetzen?
-
Das Problem ist einfach, dass exception 2 Konstruktoren hat: einen ohne Parameter und einen Copy-Construktor, der somit eine exception als Parameter bekommen muss.
Du übergibst aber ein
const char*
- das passt nicht.Siehe http://www.cplusplus.com/reference/exception/exception/exception/
-
Siehe LWG 2176.
wstring_convert<…>
ist seit C++14 weder kopier- noch moveable. Ich verstehe auch nicht, warum du vonexception
ableitest.
-
wob schrieb:
Das Problem ist einfach, dass exception 2 Konstruktoren hat: einen ohne Parameter und einen Copy-Construktor, der somit eine exception als Parameter bekommen muss.
Lies doch mal die Fehlermeldung. Er hat offensichtlich eine eigene
exception
Klasse definiert.