Einzelnen Beitrag anzeigen

Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#13

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 20:19
Zitat von Balu der Bär:
Nein, das eigentliche FreeAndNil(array) geht niemals schief.
Natürlich muss es schiefgehen, oder hast du schon einmal ein Array mit Destruktor gesehen ? Die einzige verbleibende Frage ist zu dem Zeitpunkt, wohin die Runtime springen wird und ob dieser Speicherbereich reserviert ist.
Folgendes Programm düfte beispielsweise Douglas-Adams-Fans erfreuen:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
   SysUtils;

var
   p: PInteger; // Je nach Geschmack auch ein TDynIntegerArray möglich
begin
   New(p);
   p^ := 1111638598;
   try
   FreeAndNil(p);
   except
      Readln;
   end;
   Dispose(p);
end.
Wobei durch Zufall auch hier nichts passieren kann, dann p^ einfach auf 4 setzen. Damit ist jedes Gelingen ausgeschlossen .

[add]
Oh mein Gott, macht der rote Kasten heute Blau ?
@Elivs: Ja wie, gibst du Objekte etwa nicht wie ich frei ?
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
   SysUtils, Types;

   type
      TDependencyObject = class // abhängig von meiner Grausamkeit
      public
         destructor Destroy; override;
      end;

var
   o: TDependencyObject;
   a: TIntegerDynArray;

{ TDependencyObject }

destructor TDependencyObject.Destroy;
begin
   Writeln('Hi, I''m your highly abused destructor!');
   inherited;
end;

begin
   o := TDependencyObject.Create;
   SetLength(a, 2);
   a[0] := PInteger(o)^;
   a[1] := 42;
   FreeAndNil(a);

   Readln;
end.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat