Zum Inhalt springen

[C++] Frage zum unterschied Instanzierung von Klassen (Stack/Heap)


Empfohlene Beiträge

Geschrieben

Hallo.

Bin in nem C++ Buch darüber gestoßen das ein hängender Zeiger entsteht wenn ich ein Objekt einer Klasse instanziere, dass eine dyn. zugewiesene Zeigervariable enthält und ich dieses Objekt dann einer Funktion übergebe. Sozusagen zerstört der Destruktor der Kopie den Speicherbereich.

So, habe dies ausprobiert, stimmt auch, weshalb aber passiert dieses Problem nicht, wenn man das Objekt per new instanziert und dann der Funktion übergiebt?

Habs auch ausprobiert, sowohl die Kopie als auch das Original zeigen auf eine andere Adresse, aber warum?

Hoffe mir kann jemand auf die Sprünge helfen.

Geschrieben
Bin in nem C++ Buch darüber gestoßen das ein hängender Zeiger entsteht wenn ich ein Objekt einer Klasse instanziere, dass eine dyn. zugewiesene Zeigervariable enthält und ich dieses Objekt dann einer Funktion übergebe. Sozusagen zerstört der Destruktor der Kopie den Speicherbereich.
Das passiert nur, wenn der Copykonstruktor nicht das tut, was er sollte: Den dynamisch angeforderten Speicher zu kopieren. Meistens liegt es daran, dass man gar keinen Copykonstruktor anlegt. Dann generiert der Compiler selbst einen. Der kann aber keinen dynamischen Speicher anfordern, er kopiert einfach nur den Zeiger.

Eine Klasse, die dynamischen Speicher verwaltet, sollte entweder einen ordentlichen Copykonstruktor bereitstellen oder verhindern, dass sie überhaupt kopiert wird, ansonsten ist sie meiner Meinung nach kaputt.

Es gibt die sogenannte "Regel der Großen 3": Wenn eine Klasse einen dieser drei (Copykonstruktor, Copy-Zuweisungsoperator, Destruktor) braucht, dann braucht sie alle drei.

So, habe dies ausprobiert, stimmt auch, weshalb aber passiert dieses Problem nicht, wenn man das Objekt per new instanziert und dann der Funktion übergiebt?
Es ist völlig egal, wie du das Objekt angelegt hast. Es kommt darauf an, wie du es übergibst. Die Kopie wird nur erstellt, wenn das Objekt "by value" übergeben wird. Bei einer Übergabe "by reference" passiert das nicht. Es passiert auch nicht, wenn du statt des Objekts einen Zeiger darauf übergibst - dann wird nämlich nur der Zeiger kopiert.

Habs auch ausprobiert, sowohl die Kopie als auch das Original zeigen auf eine andere Adresse, aber warum?
Zeig mal den Code dazu.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...