![]() |
Obj. über Construcor übergeben und in priv. Var. speichern
Hallo,
ich übergebe im Constructor einer Klasse ein Objekt. Nun möchte dieses in einer privaten Variable speichern um damit in der Klasse weiterzuarbeiten (andere Proceduren greifen dann über die private Variable darauf zu und verändern z.B. Farben einzelner Zellen). Diese beiden "Varianten" funktionieren beide problemlos: 1. Version
Delphi-Quellcode:
construcor Txyz.Create(GridName : TNextGrid);
begin FPrivVariable := GridName; end; 2. Version
Delphi-Quellcode:
Frage: Welche der beiden Varianten sollte man verwenden (Vor- / Nachteile) bzw. warum funktioniert die 1. Version auch, obwohl FPrivVariable gar nicht "erstellt" wurde?
construcor Txyz.Create(GridName : TNextGrid);
begin FPrivVariable := TNextGrid.Create(nil); // wird im Destruktor freigegeben FPrivVariable := GridName; end; Danke im Voraus, SCRaT |
Re: Obj. über Construcor übergeben und in priv. Var. speiche
Die 1. Version ist richtig; die 2. Version erzeugt ein Speicherleck.
>>warum funktioniert die 1. Version auch, obwohl FPrivVariable gar nicht "erstellt" wurde? Weil der Speicher für das Objekt der Klasse Txyz schon reserviert wurde, bevor der Constructor aufgerufen wird. Generell ist der Ablauf bei Delphi so: 1.) Speicher für neues Objekt reservieren 2.) Speicher mit Nullen füllen 3.) Constructor aufrufen |
Re: Obj. über Construcor übergeben und in priv. Var. speiche
Zitat:
|
Re: Obj. über Construcor übergeben und in priv. Var. speiche
Objekt-Variablen sind in Delphi Zeiger (Referenzen).
Delphi-Quellcode:
Das Objekt das im Parameter GridName übergeben wird schon existieren bevor ein Objekt der Klasse Txyz erzeugt wird.
constructor Txyz.Create(GridName : TNextGrid);
begin inherited Create; // nicht vergessen!! FPrivVariable := GridName; end;
Delphi-Quellcode:
Wichtig ist, dass das Objekt ng aus obigem Beispiel eine längere Lebensdauer als xyz hat!
var
ng : TNextGrid; xyz : Txyz; begin ng := TNextGrid.Create(); xyz := Txyz.Create(ng); xyz.Irgendwas(); .... xyz.Free; ng.Free; // Reihenfolge ist wichtig |
Re: Obj. über Construcor übergeben und in priv. Var. speiche
Zitat:
|
Re: Obj. über Construcor übergeben und in priv. Var. speiche
Zitat:
|
Re: Obj. über Construcor übergeben und in priv. Var. speiche
>> Das Objekt das im Parameter GridName übergeben wird schon existieren bevor ein Objekt der Klasse Txyz erzeugt wird.
Dann habe ich es verstanden... Der Rest ist mir klar :) Vielen Dank nochmals... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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