Wie könnte man new und delete auf einen Klassenzeiger verbieten
-
weicher schrieb:
Hallo hustbaer,
Was spricht nun wirklich dagegen die Konstruktoren und Destruktoren private zu machen?
Wie Du im PS sagts, geht's nur wenn die ctors und dtors in den Basisklassen nicht privat sondern protected sind.
Das Bedeutet, die neue Regel lautet "bei allen Instanzierbaren Klassen müssen ctor und dtor Privat sein". Damit habe ich nur die alte Regel "Objekte dürfen nur mit CreateObj() erzeugt und nie mit delete gelöscht werden" mit einer neuen Regel ausgetauscht.
Rein Gefühlsmässig ist der Verstoss gegen die neue Regel IMHO wahrscheinlicher

Herzliche Grüsse
WalterWas willst du jetzt eigentlich damit sagen?
Soll der Benutzer Stack-Objekte erstellen können? Wenn ja, was spricht dann gegen ein privates new und delete?EDIT: Meinst du damit, deine Kollegen würden sich nicht daran halten, Konstruktoren/Destruktoren bei neuen Klassen private/protected zu machen? Das kann man aber relativ einfach nachkorrigieren.
-
weicher schrieb:
Was spricht nun wirklich dagegen die Konstruktoren und Destruktoren private zu machen?
Wie Du im PS sagts, geht's nur wenn die ctors und dtors in den Basisklassen nicht privat sondern protected sind.
Das Bedeutet, die neue Regel lautet "bei allen Instanzierbaren Klassen müssen ctor und dtor Privat sein". Damit habe ich nur die alte Regel "Objekte dürfen nur mit CreateObj() erzeugt und nie mit delete gelöscht werden" mit einer neuen Regel ausgetauscht.
Rein Gefühlsmässig ist der Verstoss gegen die neue Regel IMHO wahrscheinlicher

Normalerweise werden seltener eigene Klassen definiert, als irgendwo Objekte erstellt werden.
Wenn du aber wirklich etwas suchst was automatisch neue abgeleitete Klassen schützt, fürchte ich, kann ich dir nicht helfen. Sowas gibt's in C++ nicht.
-
class Base { protected: struct ErbenMuessenDenKonstruktorProtectedMachen { }; Base(ErbenMuessenDenKonstruktorProtectedMachen,...) { ... } }