Zitat von
TPok:
Jetzt muß ich nochmal dumm nachfragen. Sind Objektvariablen direkt nach der Deklaration ohne vorherige Verwendung nicht immer mit NIL initialisiert?
Nur Variablen, die eine Referenzzählung haben: String, dyn. Array, IInterface, Variant.
Zitat:
Dazu fällt mir noch eine Frage ein:
Wenn ich mir z.B. im
MSDN .NET-Beispielcode anschaue (meist in C#)
Unter .NET gibt es keine deterministischen Destruktoren. Diese werden aufgerufen, wenn der GC meint, er müsste jetzt Rechenzeit verbrauchen. Ein (natives) Delphi.Win32 Programm besitzt keinen GC. Somit musst du dich selbst ums Aufräumen kümmern. Hast dann aber auch den Vorteil, dass du deine Destruktoren "deterministisch" aufrufen kannst. Um wenigstens ein wenig Determinismus bei .NET Destruktoren zu haben (die übrigens Finalize() heißen), hat man das IDispose Interface implementiert. Das muss man dann aber auch selbst aufrufen. Bei Datei-Streams ist es zum Beispiel etwas blöd, wenn die Datei erst geschlossen wird, wenn der GC mal Zeit hat.
Mittels Interfaces kann man sich AutoPtr (C++) basteln. (muss ich mal schnell was zusammenschreiben...)