Initialisierung einer Klasse verhindern
-
Hallo c-plusplus-Forum!
Ich habe eine Klasse, die als Grundklasse in einem Vererbungsbaum dienen soll. Als reine Basisklasse soll es natürlich keine Instanzen der Klasse geben, daher habe ich den Konstruktur Foo() protected deklariert. Damit kann ich zwar Anweisungen der Art
Foo* f = new Foo();verhindern, nicht jedoch
Foo f();Ich will es aber dennoch verhindern können. Da in meiner Oberklasse noch kein rein virtuelles Verhalten definiert wurde, fehlen mir die Mittel, meine Klasse abstrakt zu machen.

Wie kann ich die Instanzierung meiner Klasse Foo verhindern?
-
Du willst
Foo f()nicht verhindern. Das ist eine Funktionsdeklaration.
-
Mitmischer 1703 schrieb:
Wie kann ich die Instanzierung meiner Klasse Foo verhindern?
Indem du alle Konstruktoren privat/protected machst. Das was du da hast ist, wie Nexus bereits gesagt hat keine Instanzierung eines Objektes und ist daher sinnfrei.
-
stimmt, ich hatte die falsche Syntax in Erinnerung.
Danke!
-
drakon schrieb:
Indem du alle Konstruktoren privat/protected machst.
Alternativ: Destruktoren public und pure virtual machen (für polymorphe Basisklassen) oder protected.
-
Oder mach die Klasse abstrakt

-
aso, das willst/kannst du nicht.. sry

-
Könnnen tut man es immer, durch rein virtuelle Destruktoren. Aber bei nicht-polymorphen Klassen ist es halt nicht sehr sinnvoll.