C++ Destruktur wird einfach aufgerufen?


16.10.2022, 13:22

Also hier nochmal der Code:

https://pastebin.com/5YjaKpi8

TechPech1984  16.10.2022, 13:15

bilder werden hier meist nicht verarbeitet, wir sind bei code , gehört als text irgendwo auf pastebin, damit man auch entsprechend das analysieren kannund zeilenangaben

RopickHD 
Fragesteller
 16.10.2022, 13:17

Also soll ich den Code mal reinschicken?

2 Antworten

scheint das dein student out of scope geht

A destructor is a member function that is  invoked automatically when the object goes out of scope or is explicitly destroyed by a call to delete 

was ich bei zeile 103 vermute

RopickHD 
Fragesteller
 16.10.2022, 13:29

Ja das hab ich mir auch schon gedacht, aber warum?

0
TechPech1984  16.10.2022, 13:32
@RopickHD

ich könnte mir vorstellen das es duch

Mitarbeiter mit_maier = Mitarbeiter(stud_maier);

passiert, hier wird eine kopie übergeben und beim verlassen wird das objekt wieder zerstört . da es nicht mehr gebraucht wird .

1
RopickHD 
Fragesteller
 16.10.2022, 13:32

Was kann man dagegen machen?

0
TechPech1984  16.10.2022, 13:38
@RopickHD

*stud_maier

und  

Mitarbeiter(Student** test)

oder so . irgendwie war das , ich habs gerade nciht aufm zettel .

0
RopickHD 
Fragesteller
 16.10.2022, 13:40
@TechPech1984

Ich darf aber die Main-Funktion nicht verändern soweit ich weiß

0
RopickHD 
Fragesteller
 16.10.2022, 13:44
@TechPech1984

Ne ich muss die richtige Ausgabe haben und der Destruktur (bei der Ausgabe) ist da fehl am Platz. Ich habe grade einfach "Mitarbeiter(Student &test)"(Zeile 70) gemacht und es hat jetzt geklappt. Weiß nicht genau warum, falls du es wissen tust wäre ich dankbar wenn du es erklären kannst.

0

Die Werteübergabe an den Mitarbeiter-Konstruktor erfolgt by value. Sobald der Konstruktorkörper durchlaufen ist, wird dieses Objekt wieder aus dem Speicher gelöscht und löst dabei auch einen Destruktoraufruf aus.

RopickHD 
Fragesteller
 16.10.2022, 13:36

Wie kann ich das verhindern?

0
regex9  16.10.2022, 13:39
@RopickHD

Du könntest dem Konstruktor einen Pointer übergeben.

Mitarbeiter(Student *test) {
  /* ... */
}

// main:
Mitarbeiter mit_maier = Mitarbeiter(&stud_maier);
0
RopickHD 
Fragesteller
 16.10.2022, 13:40
@regex9

Ich darf die Main aber nicht verändern soweit ich das weiß

0
RopickHD 
Fragesteller
 16.10.2022, 13:42
@regex9

Ich habe einfach "Mitarbeiter(Student &test)" gemacht und es hat jetzt geklappt. Weiß nicht genau warum, falls du es wissen tust wäre ich für ne Antwort echt dankbar. :D

0
regex9  16.10.2022, 13:54
@RopickHD

Ja, das ist auch eine Lösung. Der Parameter wird in dem Fall by reference übergeben. Das heißt, der Wert wird nicht kopiert. Änderungen des Parameters spiegeln sich auf die Variable in main wieder.

0