Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 19. Aug 2002, 16:54
Dein ^TWareListItem solltest du umstellen.
Code:
[b]type[/b]
  PWareListItem = ^TWareListItem;
  TWareListItem = [b]object[/b]
    [b]constructor[/b] Create(next: [u]PWareListItem[/u]);
    ...
In Turbo/Borland Pascal gibt es noch die statischen Objekte, die keine Zeiger sind. Du kannst z.B. ein Objekt so nutzen:
Code:
[b]var[/b]
  MyObj: TWareListItem;
[b]begin[/b]
  MyObj.Create(nil);
  ...
  MyObj.Destroy;
[b]end[/b];
Mit dieser Weise fällt man aber schnell auf die Nase, wenn es um die Übergabe an Funktionen geht, da man es von Delphi gewohnt ist, dass ein Zeiger auf das Objekt übergeben wird, wobei hier eben kein Zeiger, sondern eine Kopie des gesamten Objekts übergeben wird.


Wenn du es aber so wie Delphi es macht haben willst dann geht das so:
Code:
[b]var[/b] MyObj: PWareListItem;
[b]begin[/b]
  MyObj := New(TWareListItem, Create(nil) );
  ...
  Dispose(MyObj, Destroy);
[b]end[/b];
Wenn du eine Free-Methode habe möchtest dann ist es notwendig, den Destruktor virtuell zu machen. Die Free-Methode darf auch nicht auf statische Objekt angewand werden, da diese nicht mit New() erzeugt wurden.
Code:
PObject = ^TObject;
TObject = [b]object[/b]
  [b]destructor[/b] Destroy; [b]virtual[/b];
  [b]procedure[/b] Free;
[b]end[/b];

[b]destructor[/b] TObject.Destroy;
[b]begin[/b]
[b]end[/b];

[b]procedure[/b] TObject.Free;
[b]var[/b] p: PObject;
[b]begin[/b]
  p := PObject(Self);
  Dispose(p, Destroy);
[b]end[/b];
  Mit Zitat antworten Zitat