Hallo,
Zitat von
EccoBravo:
1. Wenn dem mit dem Reservieren von Speicherplätzen so ist, warum muß nicht jede Single und jeder Integer mit Create genauso instanziert werden?
Warum denn da nicht, single ist ja auch nur ein Typ
und Var myZahl auch nur eine konkrete Kopie davon?
Integer, Byte, Char, Single, konstante Arrays usw. sind sogenannte primitive Typen. Diese benötigen immer genau den gleichen Speicherplatz, im Gegensatz zu dynamischen Arrays oder Objekten. Auch für Strings muss erst Speicher angefordert werden, allerdings übernimmt das der Compiler für Dich.
Auch bei einem Record ist von Anfang an klar, wie groß er ist. Deshalb liegt er immer auf dem Stack und verhält sich somit wie eine primitive Variable.
Such doch mal nach "Heap" und "Stack", das sind die beiden Speicherbereiche, in denen Primitives (Stack) bzw. dynamische Variablen (Objekte, Strings, dyn. Arrays) gespeichert werden.
Zitat von
EccoBravo:
2. Try .. end ist ja ganz nett,
aber was, wenn ich mit mehreren Klassen gleichzeitig arbeite?
Dann geht das z. B. so:
Delphi-Quellcode:
Class1 := TClass1.Create;
Class2 := TClass2.Create;
try
Tu was;
finally
Class2.Free;
Class1.Free;
end;
Es kann natürlich auch sein, dass im Konstruktor/Destruktor etwas schiefgeht, darum ist das hier bombensicher:
Delphi-Quellcode:
Class1 := TClass1.Create;
try
Class2 := TClass2.Create;
try
Tu was;
finally
Class2.Free;
end;
finally
Class1.Free;
end;
Zitat von
EccoBravo:
3. Create zum Instanziieren eines Formulares:
Es ist in meinen Programmen nicht immer erforderlich die Form.Create Methode auszufüllen,
diese Methode gibt es dann ja nicht im Code.
Ist dann das Formular nicht richtig als Objekt im Programm definiert?
Oder muß ich immer die Form.Create Methode ausfüllen, damit das Prigramm sauber geschrieben ist?
Schau mal in Deine Projektdatei (*.dpr). Da wird das Form erzeugt:
Application.CreateForm(TForm1, Form1);
Zitat von
EccoBravo:
4. Wie verhält es sich mit der Instantiirung von dynamischen Arrays und Variablen, deren Länge erst zur Laufzeit des Programme bekannt wird?
wie:
Delphi-Quellcode:
type
TmyArray = array of single;
var
myArray:TmyArray;
implementation
...
setlength(myArray,100);
...
Ein dynamisches Array hat erst mal die Länge Null und belegt damit auch keinen Speicher. Sobald Du "SetLength" aufrufst, forderst Du Speicher an. Du solltest am Ende immer "SetLength(MyArray, 0);" hinzufügen, damit der Speicher wieder freigegeben wird. Delphi sollte das zwar automatisch machen, aber so ist es sauberer.
Gruß
xaromz