Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

25.05.2004, 22:44

Objekte erzeugen und Objekte erzeugen

Hi, ich habe eine grundlegende Frage zum Erzeugen von Objekten einer Klasse.
Worin liegt der Unterschied zwischen den folgenden beiden Arten:
1.) cTest test;
2.) cTest test = new CTest();

Bei 2. sollte man das Objekt ja wieder mit delete test freigeben. Wie sieht das aber bei 1. aus?

Unterschiede?
Freigabe?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

25.05.2004, 23:08

Das erste wird automatisch gelöscht, sobald der Block beendet ist in dem die Var vorkommt.

Anonymous

unregistriert

3

26.05.2004, 00:45

Re: Objekte erzeugen und Objekte erzeugen

Zitat von »"blueEye"«


Worin liegt der Unterschied zwischen den folgenden beiden Arten:
1.) cTest test;
2.) cTest test = new CTest();

Bei 2. sollte man das Objekt ja wieder mit delete test freigeben. Wie sieht das aber bei 1. aus?

Unterschiede?
Freigabe?

zu 1) eine Variable im Hauptspeicher (Stack)
Zugriff über <cTest.Funktion()> und <cTest.Variable>

zu 2)wird so nicht funktionieren, sondern muss heissen :

Quellcode

1
cTest* test = new CTest();

ein Zeiger auf eine Variable im Heap
Zugriff über <cTest->Funktion()> und <cTest->Variable>
muss später mit <delete(cTest);> gelöscht werden

4

26.05.2004, 09:44

Ok, soweit so gut.
Nur worin liegen die Vorteile bzw. Nachteile?

Allanon

Frischling

Beiträge: 16

Wohnort: Kreuzau / NRW

Beruf: Schüler

  • Private Nachricht senden

5

26.05.2004, 11:42

Klasse und Zeiger

Mit 1 erzeugst du eine Instanz der Klasse, mit 2 einen Zeiger auf die Klasse.

6

26.05.2004, 14:15

Zitat

Mit 1 erzeugst du eine Instanz der Klasse, mit 2 einen Zeiger auf die Klasse.
Falsch. Bei beiden erzeigst du eine Instanz der Klasse. Bei 2 bekommt man nur den Zeiger darauf und hat nicht das Objekt selber an der Hand.


zu 1:
Vorteil: Die Instanz ist auf den Lokalen Namensraum beschränkt. Sie wird beim eintritt erzeugt und beim austritt wieder gelöscht.

Nachteil: Die Instanz ist nur Gültig solange der Namensraum geladen ist.

zu 2:
Vorteil: Instanz ist immer Global und nicht abhängig von einem Namensraum. Sie kann daher bequem im gesamten Projekt verwendet werden.

Nachteil: Die Instanz muss Manuell erstellt und gelöscht werden. Bei nicht löschen läuft man Gefahr einen Memory Leak zu erzeugen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

7

26.05.2004, 14:25

Erstmal Danke an alle Antworten, die haben mir immer ein bisschen weiter geholfen.
Aber vorallem Danke an Dragon Master, auf dessen Antwort ich wirklich gehofft hatte, weil diese trifft meine Frage wieder genau.

Jetzt kann ich mir was darunter vorstellen :-)

Vielleicht wird mit der Zeit noch die eine oder andere Frage dazu auftreten, aber dann werde ich einfach diesen Thread fortsetzen!

Samuel G.

Treue Seele

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

8

20.08.2004, 18:59

Zitat

Das erste wird automatisch gelöscht, sobald der Block beendet ist in dem die Var vorkommt.

Den "Block" nennt man auch gültigkeitsbereich. :) :) :)
Quak

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

9

20.08.2004, 19:37

Dazu gab es schonmal einen Thread: Hier

Werbeanzeige