AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Result := Text, heißt dass @Result = @Text
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von xZise · begonnen am 2. Jan 2007 · letzter Beitrag vom 2. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

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

  Alt 2. Jan 2007, 14:20
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 (Titeltext ist ja beschränkt ^^)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

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

  Alt 2. Jan 2007, 14:23
Du darfst die Instanz der Klasse nicht wieder freigeben, wenn du sie als Rückgabewert nutzen willst.

Mit
Result := Test; setzt du den Pointer um, so dass jetzt auf die erstellt Instanz der Klasse verwiesen wird.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

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

  Alt 2. Jan 2007, 14:26
Also war meine Vermutung richtig.

Also müsste ich "Result.text := Text.text" machen... Okaydokay
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 2. Jan 2007, 14:28
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?
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 2. Jan 2007, 14:28
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

Result := Text; oder

Result := TStringList.Create;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

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

  Alt 2. Jan 2007, 14:39
Also ich habe mir jetzt ein Objekt gespart:

Delphi-Quellcode:
function GetText : TStrings;
begin
  Result := TStringList.Create;
  [...]
end;
Wenn wird jetzt "Result" wieder freigegeben?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 2. Jan 2007, 14:42
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

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

  Alt 2. Jan 2007, 14:42
Hallo,
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

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

  Alt 2. Jan 2007, 14:47
Aso

Gut ^^ Dann ist das hier abgeschlossen

PS: Eins interessiert mich noch: Wäre "Result := Text" = "@Result := @Text"?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

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

  Alt 2. Jan 2007, 14:48
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:46 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