Jeremyl schrieb:
> Hallo,
>
> wenn ich den Konstruktur und Destruktor in einer Klasse "nicht
> verwende",
schlecht ausgedrückt.
Denn: verwendet wird ein Konstruktor immer dann, wenn ein Objekt erzeugt
wird
(und ein Destruktor immer dann wenn ein Objekt zerstört wird).
> also der eigentlich Standard/leer ist.
Jep. das ist legitim
> Muss man den dann in
> der .cpp Datei der Klasse trotzdem aufführen ? Oder kann ich den einfach
> weglassen (nicht das dann meine Objekte oder so nicht zerstört werden).
Du kannst ihn weglassen.
Dann erzeugt sich der Compiler selber einen Defaultkonstruktor /
Destruktor.
Der Compiler kann sich 4 Member-Funktionen 'selbst schreiben', wenn du
sie nicht schreibst
* schreibst du keinen Konstruktor, dann erzeugt sich der Compiler
selbst einen Default Konstruktor
* schreibst du keinen Copy-Konstruktor, dann erzeugt sich der Compiler
selbst einen
* schreibst du keinen Operator=, dann macht sich der Compiler selber
einen
* schreibst du keinen Destruktor, dann macht sich der Compiler selber
einen
All diesen vom Compiler erzeugten Funktionen ist gemeinsam, dass sie
sinngemäs einfach nur den Aufruf an alle Member 'weitergeben'.
Ein erzeugter Op= sorgt also dafür, dass alle Member mittels einem Op=
zugewiesen werden. Ein erzeugter Copy-Constructor sorgt dafür, dass der
Copy Constructor aller Member aufgerufen wird, etc. etc.
Das ist oft genau das was du willst, aber nicht immer. Speziell wenn
dynamisches Resource-Management im Spiel ist, dann reicht das nicht.
So was
1 | class meineKlasse
|
2 | {
|
3 |
|
4 | protected:
|
5 | std::string name_;
|
6 | };
|
ist also völlig legitim und macht genau das was du willst. Auch der
name_ wird korrekt behandelt, obwohl du selbst keinen
Konstruktor/Destruktor/Op=/Copy Konstruktor geschrieben hast. Die
Compiler-generierten machen genau das richtige.