I die folgende Code-Sequenz haben:Erste Zuordnungsadresse eines Objekts in Delphi 7
program OverrideAfterConstructionEtc;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
type
TA = class(TInterfacedObject)
public
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
protected
FDummyData: array[ 1 .. 1000 ] of longint;
end;
{ TA }
procedure TA.AfterConstruction;
var
selfPtr: Pointer;
selfInt: Integer;
selfStr: string;
size: Integer;
begin
inherited AfterConstruction;
selfPtr := Addr(self);
selfInt := Integer(selfPtr);
selfStr := IntToHex(selfInt, 8);
size := TA.InstanceSize;
WriteLn('TA instance allocated at 0x', selfStr);
WriteLn('TA size is ', size);
end;
procedure TA.BeforeDestruction;
var
selfPtr: Pointer;
selfInt: Integer;
selfStr: string;
size: Integer;
begin
selfPtr := Addr(self);
selfInt := Integer(selfPtr);
selfStr := IntToHex(selfInt, 8);
WriteLn('Preparing to destroy TA instance allocated at 0x', selfStr);
size := TA.InstanceSize;
WriteLn('TA size is ', size);
inherited BeforeDestruction;
end;
const
maxDummy = 1000;
var
a: TA;
dummy: TList;
iter : integer;
dummies: array [ 1 .. maxDummy ] of TList;
begin
// Simulate a set of allocations.
for iter := 1 to maxDummy do
begin
dummy := TList.Create;
dummies[ iter ] := dummy;
end;
// Allocate the object we want to track.
a := TA.Create;
// Release the simulated allocations.
for iter := 1 to maxDummy do
begin
dummy := dummies[ iter ];
dummies[ iter ] := nil;
FreeAndNil(dummy);
end;
// Release the tracked object.
FreeAndNil(a);
end.
Die Ausgabe des Codes ist:
- TA-Instanz bei 0x0012FF88 zugeordnet
- TA Größe 4012 Vorbereiten zum Zerstören
- TA-Instanz bei 0x0012FF80
- TA-Größe ist 4012
Ich verstehe nicht den "Selbst" Unterschied. Kannst du mir einen Hinweis geben? Ich hätte erwartet, dass die gedruckten Werte gleich wären.
Vielen Dank für Ihre Antworten. Wie markiere ich beide als Antworten (die Web-UI erlaubt mir nur, eine davon auszuwählen)? – Dan
@Dan Ich denke, Sie können nur einen auswählen! Das ist der Deal! :) –