AGB  ·  Datenschutz  ·  Impressum  







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

Dyn. Array freigeben

Ein Thema von Christian18 · begonnen am 14. Mai 2009 · letzter Beitrag vom 15. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Dyn. Array freigeben

  Alt 14. Mai 2009, 13:02
Hallo,

ich nutze ein dynamisches Array als Klassenvariable.
Delphi-Quellcode:
type
  TTest = class
  private
    testarray: Array of Int64;
  public
    constructor Create(pSize: Cardinal);
    destructor Destroy();
  end;
Im Konstruktor setze ich die Größe.
Delphi-Quellcode:
constructor TTest.Create(pSize: Cardinal);
begin
  SetLength(testarray, pSize);
end;
Außerdem habe ich auch noch eine Destruktor.
Delphi-Quellcode:
destructor TTest.Destroy();
begin
  // sollte ich hier das array löschen? oder zerstören? wenn ja, wie?
end;
MfG Christian18
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Dyn. Array freigeben

  Alt 14. Mai 2009, 13:04
Das ist das tolle an solchen Sprachfeatures: Du musst auf nichts achten. Also: Die Freigabe erfolgt automatisch (im vom Destruktor "magisch" aufgerufenen TObject.CleanupInstance, um genau zu sein).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#3

Re: Dyn. Array freigeben

  Alt 14. Mai 2009, 13:21
Ok, dann versteh ich aber eins nicht, warum macht Delphi das dann nicht auch mit Objekten?

Also wenn ich ein Array von Objekten habe, dann sollte ich diese im Destructor wieder freigeben. Warum nun mit Variablentyen nicht?

MfG Christian18
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Dyn. Array freigeben

  Alt 14. Mai 2009, 13:25
Bei Objekten weiß Delphi nicht, wem sie gehören. Wenn ein Control freigegeben wird, soll das Elterncontrol erhalten bleiben.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Dyn. Array freigeben

  Alt 14. Mai 2009, 21:20
Zitat von Christian18:
wenn ja, wie?
es wurde ja schon erklärt daß es nicht nötig wäre,
aber falls dennoch mal jemand ein (dynamisches) Array freigeben möchte ...

einfach die Länge auf 0 (null) setzen
SetLength(testarray, 0); in Delphi geh bei (dynamischen) Arrays aber auch sowas:
testarray := nil;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Dyn. Array freigeben

  Alt 14. Mai 2009, 22:55
Aber auch nur, da der Array selber ein Zeiger ist.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Dyn. Array freigeben

  Alt 14. Mai 2009, 23:17
Zitat von quendolineDD:
Aber auch nur, da der Array selber ein Zeiger ist.
nicht direkt ... nur weil Delphi bzw. die Compilermagic, bei einer Zuweisung von NIL an ein dynamisches Array (OK, welches intern eine Art Zeiger ist) die Funktion System.DynArrayClear aufruft, welches übrigens auch System.DynArraySetLength bei einer Länge von <= 0 aufruft.
DynArraySetLength ist der interne Name der Funtion, welche eigentlich aufgerufen wird, wenn man SetLength auf ein dyn. Array anwendet.

also hier würde der Speicher, auf welche P zeigen würde, nicht "einfach so" freigegeben
Delphi-Quellcode:
Var P: Pointer;

...
P := nil;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Sven M.

Registriert seit: 21. Okt 2006
Ort: Halle/Saale
106 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Dyn. Array freigeben

  Alt 15. Mai 2009, 07:26
Zitat von himitsu:
Zitat von Christian18:
wenn ja, wie?
es wurde ja schon erklärt daß es nicht nötig wäre,
aber falls dennoch mal jemand ein (dynamisches) Array freigeben möchte ...

einfach die Länge auf 0 (null) setzen
SetLength(testarray, 0); in Delphi geh bei (dynamischen) Arrays aber auch sowas:
testarray := nil;

...was allerdings auch nur geht, wenn keine Objekte im Array enthalten sind. Diese müssten nämlich gesondert freigegeben werden, sonst gibts Memoryleaks...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Dyn. Array freigeben

  Alt 15. Mai 2009, 08:31
jupp, aber diese muß man so oder so immer selber freigeben
und das hat nix mit der Freigabe des Arrays
(nicht dem Inhalt ... wobei dort wie auch hier z.B. bei Strings und anderen untergeordnete dyn. Arrays wiederrum die Compilermagic eingreift ) zu tun
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Dyn. Array freigeben

  Alt 15. Mai 2009, 10:27
Delphi-Referenz durchsuchenFinalize()?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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 21:55 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