Man darf schon vollständige Sachen posten, warum auch nicht
![Confused :confused: :confused:](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f615.png)
Aber was Anderes: Bitte Netiquette, §15 beachten.
Also generell noch mal:
Ein Konstruktor wird dann aufgerufen, wenn eine Instanz erstellt wird.
Das ist bei mittagessen usw. in der Zeile, in der man die Variable eben anlegt.
Bei inst1/inst2 und anderen Pointern ist es da, wo "=new..." steht.
In der Klasse ist der Konstruktor die Funktion, die gleich heißt wie die Klasse selber.
Es kann auch mehrere K. geben, die verschiedene Parameter nehmen.
zB. einen, der keinen Parameter braucht, und einen, der drei int nimmt.
Je nachdem, was man beim Erstellen der Variable übergibt (nichts oder eben 3 int)
wird der passende vom Compiler genommen.
Der Copykonstruktor (damits kürzer ist: CC) ist ein Sonderfall von K., der statt 3 int
oder so eine andere Variable von seiner Klasse nimmt, um anhand der Werte von der schon bestehenden Variable eine "Kopie" zu machen.
Der Zuweisungsoperator (=-Op) ist auch dafür da, die Werte von einer anderen Variable zu kopieren (wie bei int usw.). Im Unterschied zum CC wird der =-Op. dann genommen, wenn die betroffene Variable nicht gerade erst angelegt wird, sondern schon vorher existiert hat.
Sinn: Bei CC und = muss man ja - je nach Sinn der Klasse - nicht jede Variable 1:1 kopieren,
sondern kann bestimmte Variablen auch anders behandeln.
Wenn der CC aufgerufen wird, weiß man, dass die Anderen noch keinen Wert haben und auch was brauchen. Bei = weiß man, dass der CC damit schon was gemacht hat, und kann sich auf gültige Werte verlassen.
Und der Destruktor wird - als Gegenteil vom Konstruktor - dann aufgerufen, wenn die Instanz der Variable gelöscht wird. Sinn: zB. in der Klasse geöffnete Dateien zu schließen etc.
Nicht-Pointer-Variablen wie mittagessen verschwinden am Schluss des {}-Blocks, wo sie gemacht wurden, dort wird auch der Dest. aufgerufen (sieht man eben nicht im Code, macht der Compiler dazu). Pointer wie inst1, die die Instanz per new erhalten haben, werden nicht automatisch am Ende von {} weggeräumt, sondern mit einem delete. Dann ist beim delete der Dest.
So, hoffe, jetzt sind alle Klarheiten beseitigt
Gruß