Einzelnen Beitrag anzeigen

Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#19

Re: Funktionsrückgabe freigeben

  Alt 10. Mär 2007, 08:42
Zitat von Guido Eisenbeis:
@Angel4585

Bliebe noch eine Frage: Wie zum Kuckuck sieht dein "Tu was.." aus? Im Ernst, wie willst du zum Beispiel eine Zuweisung durchführen, ohne die Funktion erneut aufzurufen?

Beispiel:
Delphi-Quellcode:
type
  TMeinObject = class(TObject)
    private
      FIcon : TIcon;
    public
      constructor Create;
      property ObjectIcon : TIcon read FIcon write FIcon;
    end;


constructor TMeinObject.Create;
begin
FIcon:=TIcon.Create;
end;

function IchGebeEinObjectZurueck : TMeinObject;
begin
Result:=TMeinObject.Create;
end;
.
.
var
meinobject : TMeinObject;
begin
with IchGebeEinObjectZurueck do
  try
    // Icon aus Exe auslesen und Image zuweisen
    Image1.Picture.Graphic := ObjectIcon
  finally
    Free;
    end;
//So oder so:
meinobject:=IchGebeEinObjectZurueck;
Image1.Picture.Graphic := meinobject.ObjectIcon;
FreeAndNil(meinobject);
end;
Dazu muss ich sagen das ich das Problem nicht verstehe... den Speicher freigeben den eine Funktion belegt??
Also die Funktion erzeug ein Object, der Zeiger auf dieses Object wird weitergegeben und in eine andere Variable gespeichert, könnte auch in 10 andere Variablen weitergegeben werden, es ist und bleibt EIN Object.
Jedes Mal wenn die Funktion aufgerufen wird wird auch ein neues Object erzeugt, d.h. nach dem 10. Aufruf der Funktion sind es 10 Objekte.
Wenn ich jedoch das ganze mit einer Prozedur erledige in der das Object falls es schon erzeugt wurde freigebe und danach erzeuge ist klar das es immer nur ein einziges bleibt.

Sprich bei:

Delphi-Quellcode:
procedure DieProzedur(var AMeinObject : TMeinObject);
begin
if Assigned(AMeinObject) then
  FreeAndNil(AMeinObject);
AMeinObject:=TMeinObject.Create;
end;
Da hantiere ich die ganze Zeit mit ein und der selben Variable, wodurch auch keine neuen Instanzen des Objects erzeugt werden.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat