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 2 von 2     12   
Muetze1
(Gast)

n/a Beiträge
 
#11

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

  Alt 2. Jan 2007, 14:48
... Und da man das Anlegen und freigeben von Objekten auf der gleichen Ebene handeln sollte zum besseren Verständnis und Pflege des Quellcodes, würde ich das ganze so umstellen:

Delphi-Quellcode:
procedure x;
var
  S: TStrings;
begin
  S := TStringList.Create;
  try
    DeineFunktion(S);
  finally
    S.Free;
  end;
end;

Procedure DeineFunktion(Const AList: TStrings);
Begin
  AList.Add('Whatever');
  AList.Add('you');
  AList.Add('want');
  AList.Add('him');
  AList.Add('Todo');
  AList.Add('...');
End;
Es ist eine echt widerliche Abart von manchen Programmierern sowas zu veranstalten und in einer Procedure eine Instanz anzulegen und dann zurück zu geben. Ich habe früher so einen Müll verzapft (Siehe TXMLAttributes in meiner XMLLib), aber heute bin ich um Erfahrungen reicher und würde solche schwachsinnigen Konstruktionen um jeden Preis vermeiden.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#12

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

  Alt 2. Jan 2007, 14:49
Moin Fabian,

Zitat von xZise:
Wenn wird jetzt "Result" wieder freigegeben?
das ist genau das Problem, wenn man Objekte als Rückgabewert einer Funktion verwendet.
Grundsätzlich müsstest Du das Objekt freibeben, wenn Du es nicht mehr brauchst, aber dies natürlich, an der Stelle, an die Du den Wert übergeben hast, nicht innerhalb der Funktion.
Da man aber nicht gezwungen ist, den Rückgabewert einer Funktion zuzuweisen, kann man sich damit wunderbar Speicherlöcher einhandeln

Einfacher wäre es in so einem Falle das Ergebnis in einem Parameter zurückzugeben, der dann einfach bereits die Instanz eines Objektes enthält, in die dann die Rückgabe geschrieben wird.

BTW:
Kennt irgendjemand eine Funktion die ein neu erzeugtes Objekt als Rückgabewert hat?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

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

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

  Alt 2. Jan 2007, 14:50
Zitat von xZise:
Aso

Gut ^^ Dann ist das hier abgeschlossen

PS: Eins interessiert mich noch: Wäre "Result := Text" = "@Result := @Text"?
Nein, Result und Text sind Pointer und du lässt Result auf dieselbe Stelle wie Text zeigen.
Mit @ änderst du die Speicheradresse, nicht aber den Wert der Variable.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
xaromz

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

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

  Alt 2. Jan 2007, 14:54
Hallo,
Zitat von Christian Seehase:
BTW:
Kennt irgendjemand eine Funktion die ein neu erzeugtes Objekt als Rückgabewert hat?
Da fällt mir spontan COM ein, bzw. Class Factories allgemein. Ist aber wohl ein anderes Thema.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#15

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

  Alt 2. Jan 2007, 14:57
Zitat von Christian Seehase:
BTW:
Kennt irgendjemand eine Funktion die ein neu erzeugtes Objekt als Rückgabewert hat?
HI,
oh da gibt es doch einige:
  • Viele Implementierungen des Factory-Pattern
  • CreateBrush / CreateFont (etc.) bei den RaveReports
  • Add-Funktionen, die nur die Referenz auf das neue Objekt liefert (z.B. in der TListView)

Da kann man dann schon alleine jeweils ins Detail gehen. Dass einige davon dann auch verwaltet sind (also aut. einen Owner zugewiesen bekommen sollten/müssten/dürften gehört ja nicht direkt zu deiner Frage )

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

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

  Alt 2. Jan 2007, 19:51
So

Jetzt habe ich die Hinweise so gut es ging berücksichtigt

@ Create... als Namen: Habe ich nicht umgesetzt, weil jetzt ja da nichts mehr "createt" wird.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 07:47 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