AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Borland Pascal 7: Freigeben von Objekten

Ein Thema von d3g · begonnen am 19. Aug 2002 · letzter Beitrag vom 19. Aug 2002
Antwort Antwort
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#1

Borland Pascal 7: Freigeben von Objekten

  Alt 19. Aug 2002, 15:17
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:
[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];
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?

Danke im Voraus,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 19. Aug 2002, 15: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
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#3
  Alt 19. Aug 2002, 15:59
Hi jbg,

d.h. ich brauche keinen Code in der Destroy-Routine? Das wollte ich nämlich wissen . Danke.

MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 19. Aug 2002, 16:06
Zitat von d3g:
ich brauche keinen Code in der Destroy-Routine?
Wenn du in Create keinen Speicher reservierst, oder andere Objekte mit ihrem Konstruktor erzeugst, dann brauchst du nichts in Destroy schreiben.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz