AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign TObjectList sauber an function übergeben und wieder zurück

TObjectList sauber an function übergeben und wieder zurück

Ein Thema von norwegen60 · begonnen am 9. Jul 2020 · letzter Beitrag vom 11. Jul 2020
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
529 Beiträge
 
Delphi 12 Athens
 
#1

AW: TObjectList sauber an function übergeben und wieder zurück

  Alt 11. Jul 2020, 09:24
Nur eines darf man nicht tun: das Interface als Objektreferenz erzeugen und sowohl als Interface- und Objektreferenz benutzen und dann die Objektreferenz mit Free freigeben.
Meinst du sowas:

Delphi-Quellcode:
type
  ITestList = IList<TTest>;

function SoJa:ITestList;
begin
  Result := TCollections.CreateObjectList<TTest>(True);
end;

function SoNie:ITestList;
begin
  Result := ITestList.Create;
end;

Procedure Start;
var
  lTest:ITestList;
begin
  lTest := SoNie;
  lTest.Free;

  // So was darf man? Ist aber unnötig, da beim Verlassen von Start lTest sowieso freigegeben wird
  lTest := SoJa;
  lTest.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#2

AW: TObjectList sauber an function übergeben und wieder zurück

  Alt 11. Jul 2020, 10:06
Vergiss das Free einfach im Zusammenhang mit referenzgezählten Interfaces. Die Instanz wird ganz automatisch freigegeben, wenn der letzte Verweis auf sie ungültig wird, sei es, dass die Variable aus dem Scope läuft oder explizit auf nil gesetzt wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TObjectList sauber an function übergeben und wieder zurück

  Alt 11. Jul 2020, 10:14
Beides nicht .... KEIN Free,

Ob man aber das letzte lTest := nil; macht oder nicht, das ist egal, aber entspricht deinen Kommentaren.
Und selbst das Erste wäre nicht nötig.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Jul 2020 um 10:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.055 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: TObjectList sauber an function übergeben und wieder zurück

  Alt 11. Jul 2020, 11:07
Interfaces haben kein Create oder Free , damit erübrigt sich die Frage ob man das machen sollte oder nicht.

Die Spring4D Collections sind so designed, dass du niemals mit den implementierenden Klassen in Berührung kommst, du erzeugst sie alle über die entsprechenden Methoden auf TCollections aus der Unit Spring.Collections . Niemals z.B. Spring.Collections.Lists ins uses und selbst TList<TTest>.Create machen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
483 Beiträge
 
#5

AW: TObjectList sauber an function übergeben und wieder zurück

  Alt 11. Jul 2020, 11:57
Die Spring4D Collections sind so designed, dass du niemals mit den implementierenden Klassen in Berührung kommst, du erzeugst sie alle über die entsprechenden Methoden auf TCollections aus der Unit Spring.Collections . Niemals z.B. Spring.Collections.Lists ins uses und selbst TList<TTest>.Create machen.
Ich verwende seit Kurzem Spring4D und DSharp. Habe bis jetzt gedacht, dass ich alles an Infos gegoogelt habe. Und ganz zufällig erfahre ich hier, dass ich wohl auf das falsche DSharp Beispiel "Sample7.Main" gesetzt habe.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.055 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: TObjectList sauber an function übergeben und wieder zurück

  Alt 11. Jul 2020, 15:22
Und ganz zufällig erfahre ich hier, dass ich wohl auf das falsche DSharp Beispiel "Sample7.Main" gesetzt habe.
Touché, stammt vermutlich noch aus der Zeit, als DSharp selber noch interface basierte Collections hatte und kompiliert derzeit nicht mal - von daher jo, bestimmt das falsche Beispiel.
Aber wenn es sonst außer nem ironischen Seitenhieb nichts zu klagen gibt, dann bin ich ja froh
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (11. Jul 2020 um 15:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz