Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Result := Text, heißt dass @Result = @Text (https://www.delphipraxis.net/83412-result-%3D-text-heisst-dass-%40result-%3D-%40text.html)

xZise 2. Jan 2007 13:20


Result := Text, heißt dass @Result = @Text
 
Also ich mache in eine Funktion vereinfacht das:
Delphi-Quellcode:
function getSth : TStrings;
var
  Text : TStrings;
begin
  Text := TStringList.Create;
  [...]
  Result := Text;
  Text.Free;
end;
Kann es nun sein, dass Result = nil ist, wenn ich Text freigebe? Also das sozusagen Result und Text auf die gleiche Adresse zeigen, und beide nil sind, wenn ich eins von beiden Freigebe?

Oder stimmt das nicht?


PS: Ich habe gesucht, aber irgendwie waren die Ergebnisse nicht passend, oder mir fielen nicht die Parameter ein.
PPS: Ich habe mich noch nicht so richtig mit Zeigern beschäftigt, aber ich hoffe dass "@Bla" auf die Adresse von "Bla" zeigt :D (Titeltext ist ja beschränkt ^^)

ste_ett 2. Jan 2007 13:23

Re: Result := Text, heißt dass @Result = @Text
 
Du darfst die Instanz der Klasse nicht wieder freigeben, wenn du sie als Rückgabewert nutzen willst. :)

Mit
Delphi-Quellcode:
Result := Test;
setzt du den Pointer um, so dass jetzt auf die erstellt Instanz der Klasse verwiesen wird.

xZise 2. Jan 2007 13:26

Re: Result := Text, heißt dass @Result = @Text
 
Also war meine Vermutung richtig.

Also müsste ich "Result.text := Text.text" machen... Okaydokay

Eichhoernchen 2. Jan 2007 13:28

Re: Result := Text, heißt dass @Result = @Text
 
Er kann sich aber vorher auch einfach die Daten kopieren und dann die vorherige Klasse freiegeben aber macht ja nicht wirklich Sinn. Da durch das Freigeben einer der Beiden sowieso beide weg wären, daher einfach nicht freigeben und wenn du irgendwann das result freigibst ist ehh alles weg oder nicht?

Bernhard Geyer 2. Jan 2007 13:28

Re: Result := Text, heißt dass @Result = @Text
 
Zitat:

Zitat von xZise
Also war meine Vermutung richtig.

Also müsste ich "Result.text := Text.text" machen... Okaydokay

Du mußt dafür sorgend das hinter Result auch ein gültiges Objekt hängt.
Also entweder in deinem Code

Delphi-Quellcode:
Result := Text;
oder

Delphi-Quellcode:
Result := TStringList.Create;

xZise 2. Jan 2007 13:39

Re: Result := Text, heißt dass @Result = @Text
 
Also ich habe mir jetzt ein Objekt gespart:

Delphi-Quellcode:
function GetText : TStrings;
begin
  Result := TStringList.Create;
  [...]
end;
Wenn wird jetzt "Result" wieder freigegeben?

Bernhard Geyer 2. Jan 2007 13:42

Re: Result := Text, heißt dass @Result = @Text
 
Zitat:

Zitat von xZise
Also ich habe mir jetzt ein Objekt gespart:

Delphi-Quellcode:
function GetText : TStrings;
begin
  Result := TStringList.Create;
  [...]
end;
Wenn wird jetzt "Result" wieder freigegeben?

Automatisch: Gar nicht. Da mußt du schon selbst dafür sorgen.

xaromz 2. Jan 2007 13:42

Re: Result := Text, heißt dass @Result = @Text
 
Hallo,
Zitat:

Zitat von xZise
Wenn wird jetzt "Result" wieder freigegeben?

Gar nicht. Das muss die aufrufende Funktion übernehmen. Z. B. so:
Delphi-Quellcode:
procedure x;
var
  S: TStrings;
begin
  try
    S := GetText;

    // irgendwas machen
  finally
    S.Free;
  end;
end;
Gruß
xaromz

xZise 2. Jan 2007 13:47

Re: Result := Text, heißt dass @Result = @Text
 
Aso ;)

Gut ^^ Dann ist das hier abgeschlossen ;)

PS: Eins interessiert mich noch: Wäre "Result := Text" = "@Result := @Text"?

jbg 2. Jan 2007 13:48

Re: Result := Text, heißt dass @Result = @Text
 
Zitat:

Zitat von xZise
Delphi-Quellcode:
function GetText : TStrings;
begin
  Result := TStringList.Create;
  [...]
end;

So eine Funktion würde ich nicht "Get..." nennen, sondern "Create...". Damit ist mir beim Aufruf der Funktion bereits klar, dass ich für das Freigeben zuständig bin.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr.
Seite 1 von 2  1 2      

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