Destruktor wird zweimal aufgerufen
-
Quelle für Nathans Kommentar: z.B. hier
-
Nathan schrieb:
Schreibt man einen eigenen Destruktor...macht man etwas falsch.
Für
virtuellepolymorphe Basisklassen ist ein virtual dTor aber ganz hilfreich.
-
Jockelx schrieb:
Nathan schrieb:
Schreibt man einen eigenen Destruktor...macht man etwas falsch.
Für virtuelle Basisklassen ist ein virtual dTor aber ganz hilfreich.
Dann sagen wir es in diesem Fall lieber "einen eigenen, nicht-virtuellen, nicht-leeren Destruktor".
-
class VirtualFoo { public: virtual ~VirtualFoo() = default; };
edit: Schlüsselwort virtual vergessen -.-'
-
Jockelx schrieb:
Nathan schrieb:
Schreibt man einen eigenen Destruktor...macht man etwas falsch.
Für virtuelle Basisklassen ist ein virtual dTor aber ganz hilfreich.
Und copy/mov bekannterweise verboten -> keine Ausnahme.
-
@Jockelx
Meinst du wirklich virtuelle Basisklassen (virtuelle Vererbung) oder einfach polymorphe Basisklassen?
-
Ja, danke, meinte polymorph.
Skym0sh0 schrieb:
class VirtualFoo { public: ~VirtualFoo() = default; };
Ist das so!? Weiss ich jetzt nicht genau, aber nach meinem Wissen erzeugt er den, den er erzeugen würde, wenn man nichts angibt (also nicht virtual).
-
Jockelx schrieb:
Skym0sh0 schrieb:
class VirtualFoo { public: ~VirtualFoo() = default; };
Ist das so!? Weiss ich jetzt nicht genau, aber nach meinem Wissen erzeugt er den, den er erzeugen würde, wenn man nichts angibt (also nicht virtual).
Das ist wohl ziemlich sicher so.
Frage: Istclass VirtualFoo { public: virtual ~VirtualFoo() = default; };
erlaubt?
(GCC frisst es zumindest)
-
Jockelx schrieb:
Ja, danke, meinte polymorph.
Skym0sh0 schrieb:
class VirtualFoo { public: ~VirtualFoo() = default; };
Ist das so!? Weiss ich jetzt nicht genau, aber nach meinem Wissen erzeugt er den, den er erzeugen würde, wenn man nichts angibt (also nicht virtual).
Well, fuck
Ich hab doch echt das virtual vergessen
hustbaer schrieb:
(GCC frisst es zumindest)
MSVC auch
-
hustbaer schrieb:
Frage: Ist [..] erlaubt?
(GCC frisst es zumindest)Ja.