Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » new

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.08.2003, 14:34 Uhr
~planlos
Gast


hello!
was ist der unterschied zw.
CMyClass myClass;
und
CMyClass *myClass = new CMyClass;
bzw. worin liegt der Vorteil bei einem der beiden?
???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.08.2003, 18:33 Uhr
foeldi



Ich bin mir da nicht so sicher, glaube aber das ist so:

mit dem einen Befehl reservierst du den Speicher für das Objekt auf dem Heap
und mit dem anderen befehl speicher auf stack!?

...verlass dich nicht drauf
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.08.2003, 18:34 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Beim ersten handelt es sich um eine Variable deren Datentyp eine Klasse ist.
myClass ist eine Instanz der Klasse CMyClass. Über die Variable erhälst Du Zugriff auf die Methoden Datenelemente und Attribute der instanzierten Klasse.
Nun ist es so, das nicht immer im Voraus absehbar ist, wieviel Speicherbedarf mein Programm hat. Das ist z.b. von Aktionen des Benutzers abhängig. Bsp.: Zeichenprogramm. Ich will alle Informationen über Objekte, welche der User angelegt hat, irgendwie speichern. Kreise, Linien, Anfang- und Endpunkte usw. Woher weiß ich wieviele Speicher für vieviel Objekte ich benötige? Schwer anzuschätzen. Aslo brauche ich eine Möglichkeit Speicher dynamisch zu verwalten. Mint dem Operator new alloziiere ich Speicherplatz für Daten eines bestimmten Datentypes. Der Rückgabewert dieses Operators ist ein Zeiger (Pointer) auf den neue reservierten Speicherbereich.
CMyClass *myClass = new CMyClass;
könnte auch so geschrieben werten:
CMyClass *myClass;
myClass = new CMyClass;
In Zeile 1 wird Speicherplatz (für eine Adresse) für die Zeigervariable bereitgestellt.
In Zeile 2 wird der Speicherbereich alloziiert.
Mit delete p wird der Speicherplatz wieder frei gegeben.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.08.2003, 18:50 Uhr
Pablo
Supertux
(Operator)



Zitat:
foeldi postete
Ich bin mir da nicht so sicher, glaube aber das ist so:

mit dem einen Befehl reservierst du den Speicher für das Objekt auf dem Heap
und mit dem anderen befehl speicher auf stack!?

...verlass dich nicht drauf


Das ist auch richtig:

mit einem new Aufruf reservierst du den Speicher auf dem Heap.
Ohne new reservierst du den Speicher auf den Satck, eine Datenstruktur von Typ LIFO (Last In, First Out).

Wenn du Speicher mit new reservierst, musst du nie vergessen, ihn mit delete zu löschen, sonst entstehen Speicherlecks.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: