![]() |
Borland Pascal 7: Freigeben von Objekten
Hi Leute,
kann mir jemand von euch Nachhilfeunterricht in OOP mit Turbo Pascal geben (als ich mit TP programmiert habe, war OOP für mich noch ein Fremdwort...). Ich habe folgenden Code:
Code:
Ich kann kein Objekt von TObject ableiten (weil es kein TObject gibt), nun weiß ich aber nicht, wie ich im Destruktor dn Speicher für mein Objekt freigeben soll... Kann mir jemand helfen?
[b]type[/b]
TWareListItem = [b]object[/b] [b]public[/b] [b]constructor[/b] Create(next: ^TWareListItem); [b]destructor[/b] Destroy; [b]procedure[/b] SetNext(next: ^TWareListItem); [b]function[/b] GetWare: TWare; [b]private[/b] nextItem: ^TWareListItem; ware: TWare; [b]end[/b]; Danke im Voraus, d3g |
Dein ^TWareListItem solltest du umstellen.
Code:
In Turbo/Borland Pascal gibt es noch die statischen Objekte, die keine Zeiger sind. Du kannst z.B. ein Objekt so nutzen:
[b]type[/b]
PWareListItem = ^TWareListItem; TWareListItem = [b]object[/b] [b]constructor[/b] Create(next: [u]PWareListItem[/u]); ...
Code:
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.
[b]var[/b]
MyObj: TWareListItem; [b]begin[/b] MyObj.Create(nil); ... MyObj.Destroy; [b]end[/b]; Wenn du es aber so wie Delphi es macht haben willst dann geht das so:
Code:
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.
[b]var[/b] MyObj: PWareListItem;
[b]begin[/b] MyObj := New(TWareListItem, Create(nil) ); ... Dispose(MyObj, Destroy); [b]end[/b];
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]; |
Hi jbg,
d.h. ich brauche keinen Code in der Destroy-Routine? :) Das wollte ich nämlich wissen :mrgreen:. Danke. MfG, d3g |
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz