AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Freigeben von Objekten einer Function

Ein Thema von ScharfeMietze · begonnen am 23. Sep 2018 · letzter Beitrag vom 25. Sep 2018
Antwort Antwort
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#1

Freigeben von Objekten einer Function

  Alt 23. Sep 2018, 11:24
Delphi-Quellcode:
function TTGMBot.TGMessagefnd(const Index: Integer): TTGMessage;
begin
  try
    Result:= TTGMessage.Create;

  if Assigned(FTGResults) then
    begin
    if Assigned(FTGResults[Index].TGMessage) then
      begin
        Result:= FTGResults[Index].TGMessage;
        mmo2.Lines.Add('TGMessagefnd' + FTGResults[Index].TGMessage.chat.id);
      end
    else
    if Assigned(FTGResults[Index].edited_message) then
      begin
        Result:= FTGResults[Index].edited_message;
        mmo2.Lines.Add('TGMessagefnd' + FTGResults[Index].edited_message.chat.id);
      end
    else
    if Assigned(FTGResults[Index].channel_post) then
      begin
        Result:= FTGResults[Index].channel_post;
        mmo2.Lines.Add('TGMessagefnd' + FTGResults[Index].channel_post.chat.id);
      end
    else
    if Assigned(FTGResults[Index].edited_channel_post) then
      begin
        Result:= FTGResults[Index].edited_channel_post;
        mmo2.Lines.Add('TGMessagefnd' + FTGResults[I].edited_channel_post.chat.id);
      end;
    end;
  except
     Result.Free;
     raise
  end;
end;
ich habe ein generische OBjektliste vom Typ TTGMessage , in der sich entweder eine Message oder eine edited_message befindet.(alle sind vom Typ TTGMessage)

Aufrufen tu ich sie so
Delphi-Quellcode:
 for I := 0 to FTGResults.Count-1 do
  begin
   mmo2.Lines.Add(TGMessagefnd.chat.id);
  end;
Die Frage ist, was mache ich mit dem erstellten "Result:= TTGMessage.Create;" in TGMessagefnd
muss ich das irgendwann befreien? Oder zerlegt sie sich automatichsch ? Ich hab mir da eigentlich nie drüber gedanken gemacht. Da das Tool aber im Dauereinsatz auf einer "schwachen" Maschine laufen soll würde es mich mal interessieren.


Gruß Mietze
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
781 Beiträge
 
#2

AW: Freigeben von Objekten einer Function

  Alt 23. Sep 2018, 12:11
Du erstellst zuerst eine neue Instanz und weist diese Result zu:

Result:= TTGMessage.Create;
Dann weist du Result eine andere Instanz zu:

z.B.: Result:= FTGResults[Index].TGMessage; wodurch die zuerst erstellte Instanz in der Luft hängt und nie freigegeben wird.

=> Lass einfach das create weg, das du scheinbar hier gar nicht brauchst.
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#3

AW: Freigeben von Objekten einer Function

  Alt 23. Sep 2018, 12:49
Hmmmm Okay damit ist eine Frage beantwortet aber neue Verständnisfragen tauchen auf.

Delphi-Quellcode:
function TTGMBot.TGMessagefnd(const Index: Integer): TTGMessage;
begin
  try

  if Assigned(FTGResults) then
    begin
    if Assigned(FTGResults[Index].TGMessage.chat) then
      begin
        Result:= FTGResults[Index].TGMessage;


end;
Was ist nun in dem Result? ein "copie" ausFTGResults[Index].TGMessage; oder ist es das komplette objekt das dann aus FTGResults[Index] verschwindet??

oder verweist das Result nur auf FTGResults[Index].TGMessage; und wird beim löschen von FTGResults.free aufgeräumt?!?
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
781 Beiträge
 
#4

AW: Freigeben von Objekten einer Function

  Alt 23. Sep 2018, 12:52
Letzteres.
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#5

AW: Freigeben von Objekten einer Function

  Alt 23. Sep 2018, 14:08
Okay thx das erleuchtet mich ^^
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Freigeben von Objekten einer Function

  Alt 23. Sep 2018, 18:19
Schreib in deiner DPR-Datei einfach mal ReportMemoryLeaksOnShutdown := True; dazu. Wenn du dein Programm dann beendest, dann bekommst du eine Liste aller nicht freigegebenen Ressourcen. Wenn keine Meldung kommt, dann ist alles sauber.

Ich würde aber einfach mal behaupten, dass die Meldung da sein wird wenn du dir bis jetzt keine Gedanken darum gemacht hast.
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:11 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