protected destructor
-
hallo!
ich würde gerne wissen, worin der sinn besteht, den destructor als protected zu deklarieren ? das wird ja oftmals gemacht und eigentlich versteh ich das nicht. constructor und destructor sollten doch immer public sein, oder ?
gruss flashy
-
Hallo, es lohnt sich manchmal object-construction zu einem anderen Klassen ueberzugeben.
Lese Z.B. ueber programmierung pattern Fabrik z.B.
-
Also einen protected Destruktor, davon habe ich persoenlich noch nichts gehoert, und das kommt mir auch etwas spanisch vor. Ich meine der Destruktor wird ja normalerweise schon von ausserhalb aufgerufen. Das einzige wo das vielleicht nicht zu Fehlern führt ist in einer abstrakten Basisklasse, wo dann der Destruktor nur von der abgeleiteten Klasse aufgerufen wird. Sonst würde das ja das Speichermanagment etwas verkomplizieren, man müsste ein public Metode schreiben um den Destrukor aufrufen zu koennen. Naja, vielleicht hat ja noch jemand eine gute Erklaerung dafür.
Das der Konstruktor nicht public ist macht z.B. bei der Implementierung eines Singletons Sin.
-
Also einen protected Destruktor, davon habe ich persoenlich noch nichts gehoert, und das kommt mir auch etwas spanisch vor.
Ein Basisklassendestruktor sollte entweder öffentlich und virtuell oder protected und nicht virtuell sein.
Um Herb Sutter zu zitieren:In brief, then, you're left with one of two situations. Either: a) you want to allow polymorphic deletion through a base pointer, in which case the destructor must be virtual and public; or b) you don't, in which case the destructor should be nonvirtual and protected, the latter to prevent the unwanted usage.
Ausführlich beschrieben ist das Thema hier: http://www.gotw.ca/publications/mill18.htm
-
Jetzt wo ich das so lese ist mir das klar.
Ich kann aber einen Konstruktor doch nur bein einer abstrakten Basis Klasse nonvirtual und protected machen,
sonst bekomme ich die ja nicht mehr geloescht!
-
Entyl_Sa schrieb:
Ich kann aber einen Konstruktor doch nur bein einer abstrakten Basis Klasse nonvirtual und protected machen,
sonst bekomme ich die ja nicht mehr geloescht!Sofern du statt Konstruktor Destruktor gemeint hast - Ja.
Denn genau das definiert doch eine abstrakte Klasse -> dass man sie eben nicht instanziieren kann.
-
hallo und vielen dank für die vielen kommentare ! jetzt ist mir einiges klarer
flashy