Einzelnen Beitrag anzeigen

CocoPops
(Gast)

n/a Beiträge
 
#4

AW: Record "finalisieren"

  Alt 2. Apr 2014, 15:13
Sehr interessant. Das scheint wunderbar, selbst im TThread, zu funktionieren.

Warum war denn Finalize(Data^) falsch?

Ich habe mit mal den Code von Dispose rausgesucht:
Delphi-Quellcode:
procedure _Dispose(P: Pointer; TypeInfo: Pointer);
{$IFDEF PUREPASCAL}
begin
  _Finalize(P, TypeInfo);
  FreeMem(P);
end;
{$ELSE}
asm
        { ->    EAX     Pointer to object to be disposed        }
        {       EDX     Pointer to type info                    }

{$IFDEF ALIGN_STACK}
        SUB ESP, 8
{$ENDIF ALIGN_STACK}
        PUSH EAX
        CALL _Finalize
        POP EAX
{$IFDEF ALIGN_STACK}
        SUB ESP, 4
{$ENDIF ALIGN_STACK}
        CALL _FreeMem
{$IFDEF ALIGN_STACK}
        ADD ESP, 12
{$ENDIF ALIGN_STACK}
end;
{$ENDIF !PUREPASCAL}
Finalize ist wirklich vertreten, aber mit einer Bedingung verknüpft.

Und in der selben Unit wird, wenn Dispose(P); aufgerufen wird, auch niemals Finalize aufgerufen.
Demnach scheint Finalize wirklich immer aufgerufen zu werden, wenn man Dispose aufruft.

Geändert von CocoPops ( 2. Apr 2014 um 15:15 Uhr)
  Mit Zitat antworten Zitat