AGB  ·  Datenschutz  ·  Impressum  







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

Handling von Objekten (vom Typ TObject)

Ein Thema von Yheeky · begonnen am 23. Jun 2008 · letzter Beitrag vom 24. Jun 2008
 
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Handling von Objekten (vom Typ TObject)

  Alt 23. Jun 2008, 21:03
Du musst dir ein Object, wenn du es so deklarierst
Delphi-Quellcode:
var
  MyObj: TMyObject;
so vorstellen:

- Du hast erstmal ein Speicherbereich (Heap), auf dem die ganzen Eigenschaften (Felder) gespeichert werden
- Außerdem hast du einen Zeiger auf diesen Bereich

Am Anfang ist nur der Zeiger da, der halt irgendwo hin zeigt (NIL - Not In List). Dieser Zeiger wird am Anfang der Procedure erstellt und am Ende der Procedure wieder gelöscht.
Um jetzt mit dem Objekt arbeiten zu können musst du dir erstmal dein Speicherbereich auf dem Heap reservieren und den Zeiger darauf setzen. Das erledigst du mit dem sogenannten Konstructor:
MyObj := TMyObject.Create; Das ist immer zwingend notwendig, wenn du auf einen Zeiger zugreifst der nirgendwohin zeigt gibts ne Zugriffsverletzung.
Jetzt kannst du dir zB ein Object erstellen und mehrere Zeiger darauf haben:
Delphi-Quellcode:
var
  MyObj1, MyObj2: TMyObject;
begin
  MyObj1 := TMyObject.Create; // Speicherplatz reservieren und Zeiger MyObj1 ausrichten
  MyObj2 := MyObj1; // Auch noch den 2ten Zeiger ausrichten


  MyObj2.Eigenschaft := 'Bla';
  MyObj1.Eigenschaft := 'Hallo';
  Showmessage(MyObj2.Eigenschaft); // Da wir auf den gleichen Speicherbereich zugreifen kommt "Hallo"
  MyObj2.Free; // Den reservierten Speicherplatz wieder freigeben

  TMyObject.Create; // auch das ist möglich, blöderweise haben wir dann kein zeiger darauf -.-
end;
Das .free nicht vergessen, da der reservierte Speicherbereich sonst im Heap bleibt und erst am Ende, wenn das Programm beendet wird, freigegeben wird (-> Speicherleck).

Bei deiner oben genannten Funktion werden nur die Zeiger weitergegeben, da diese Zeiger schon auf einen Speicherbereich zeigen musst du in diesem Fall den Konstructor und Destructor (free) weglassen.
Nochmal ganz konkret: Mit dem Konstructor reservierst du Speicher und setzt deinen Zeiger darauf, bei deiner Funktion ist der Speicher schon da und du veränderst nur den Zeiger.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
 


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 09:45 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