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.