AGB  ·  Datenschutz  ·  Impressum  







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

Rückgabewert von Function freigeben

Ein Thema von LoL · begonnen am 25. Feb 2005 · letzter Beitrag vom 28. Feb 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#11

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 11:02
Heißt das, dass dieser Code:

Delphi-Quellcode:
var
  B: TBitmap;
begin
  B := Foo;
  FreeAndNil(B);
end;
Gegen die Wand laufen würde? Ich dachte immer die Objektvariable sei nur ein Pointer auf das Objekt?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#12

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 11:53
Delphi-Quellcode:
var comp : TComponent;

procedure TForm1.Button1Click(Sender: TObject);
var p : Pointer;
begin
  p.free;
  p := @comp;
  p := TComponent.Create(form1);
  if comp = nil then showmessage('NIL');
end;
Die Komponente comp ist danach aber immer noch NIL?!?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#13

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 12:43
@LoL:
Wie ich schonmal sagte, das Problem ist hier einfach nur, dass FreeAndNil eine Variable als Parameter haben will und eine Function als Funktionsergebnis eben nur sowas wie eine Konstante zurückgibt.

Demnach geht folgendes eben nicht.

Code:
procedure CurrentOL(var Value : TComponent);
begin
  if ... then Value := EineKomponente
  else Value := EineAndereKompoente;
end;

[color=#ff0000]FreeAndNil(CurrentOL);[/color]
Aber wie man oben schön sieht gibt es viele Möglichkeiten dieses zu umgehen.
- über Pointer
- über 'ne zusätliche Variable
- ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#14

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 12:47
ich beziehe mich jetzt auf mein beispiel direkt über deinem post...
warum ist die componente die auf die der pointer zeigt nil?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#15

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 12:57
Das ist das Problem, wenn man mit den Pointern Falsch umgeht

Ich hoffe so geht es: (hab ja selber noch nicht alle Tricks drauf)
Code:
procedure TForm1.Button1Click(Sender: TObject);
var p : Pointer;
begin
  p.free;
  p := @comp;
  p := [color=#ff0000]@[/color]TComponent.Create(form1);
  if comp = nil then showmessage('NIL');
end;
[add]
neee, ich glaub so geht es auch nicht, aber sowas in der Richtung muß es wohl sein

aber p.Free ist eh falsch.

So sollte es an dieser Stelle wohl richtiger sein:
Delphi-Quellcode:
var p : Pointer;

p^.Free;
TCompunent(p^).Free;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#16

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 13:02
das geht gar nicht dann kommt variable required...
müsste das aber wenn dann nicht umgekehrt sein? war das nicht irgendwie so dass man dazu den pointer dereferenzieren muss
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#17

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 13:32
Wie schon gesagt besteht die einzige Möglichkeit darin, den Rückgabewert der Funktion einer Objektvariablen zuzuweisen und dann den Destruktor des Objekts aufzurufen (oder eben FreeAndNil).

Das ganze Gerede um Zeiger in dem Thread hier ist zumeist falsch, darüber hinaus wird in Delphi ein Objekt grundsätzlich dynamisch instantiiert, die Objektvariable ist also nichts weiter als ein typisierter Zeiger.
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#18

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 13:34
ich hab es nun:

Delphi-Quellcode:
var comp : TComponent;

procedure TForm1.Button1Click(Sender: TObject);
var p : Pointer;
begin
  p := @comp;
  TComponent(p^).free;
  TComponent(p^) := TComponent.Create(form1);
  if comp = nil then showmessage('NIL');
end;
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#19

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 13:49
Zitat von LoL:
ich hab es nun:

Delphi-Quellcode:
var comp : TComponent;

procedure TForm1.Button1Click(Sender: TObject);
var p : Pointer;
begin
  p := @comp;
  TComponent(p^).free;
  TComponent(p^) := TComponent.Create(form1);
  if comp = nil then showmessage('NIL');
end;
Wieso denn das? Das rumgezeigere da ist doch komplett unnötig.
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#20

Re: Rückgabewert von Function freigeben

  Alt 25. Feb 2005, 14:00
also ich erklär mal wozu ich das brauche:

ich verwende die Komponente TChart. dort habe ich mehrere graphen. zu jedem graph habe ich eine art Object liste weil ich an den graphen teilweise edits und andere komponenten positionieren muss. nun brauche ich eine funktion die mir die aktuelle objectlsite zurück gibt in abhängikeit davon welche series gerade bearbeitet wird. ich will das mit einer funktion machen da ich direkt mit dem zurückgegebenen wert der funktion arbeiten will.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:32 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