AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language kann dieses Konstrukt überhaupt funktionieren? (Arrays...)
Thema durchsuchen
Ansicht
Themen-Optionen

kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

Offene Frage von "xZise"
Ein Thema von cherry · begonnen am 28. Jul 2010 · letzter Beitrag vom 5. Aug 2010
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.752 Beiträge
 
Delphi 12 Athens
 
#1

AW: kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

  Alt 29. Jul 2010, 10:32
Was mache ich falsch?
Nur so 'ne Idee: Initialisierst du die Instanzen der jeweiligen Listen (z.B. TUser.Groups) denn auch? Es handelt sich dabei schließlich um Objekte.

Ich würde das so realisieren (reduziert auf Groups):

Delphi-Quellcode:
type
  TUser = class(TObject)
  private
    FGroups: TGroups;
  public
    constructor Create;
    destructor Destroy;
    property Groups: TGroups read FGroups;
  end;

constructor TUser.Create;
begin
  inherited Create;
  FGroups := TGroups.Create; // so ist TGroups für die Freigabe der enthaltenen Objekte zuständig
end;

destructor TUser.Destroy;
begin
  FGroups.Free;
  inherited;
end;
Analog muss man natürlich auch für die anderen Container verfahren.

Wie in dem Kommentar vermerkt, kümmert sich TObjectList<T> standardmäßig um die Freigabe der enthaltenen Instanzen bei Delete, Clear und Free. Will man das nicht (z.B. weil nur Referenzen gespeichert werden sollen), muss man Create(false) verwenden. Das kann z.B. Sinn machen, wenn die Gruppen global verwaltet werden und die User nur Referenzen auf die Gruppen speichern. Dann muss man aber auch darauf achten, daß diese Referenzen entfernt werden, bevor die entsprechenden Gruppen freigegeben werden.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#2

AW: kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

  Alt 29. Jul 2010, 10:54
Nur so 'ne Idee: Initialisierst du die Instanzen der jeweiligen Listen (z.B. TUser.Groups) denn auch? Es handelt sich dabei schließlich um Objekte.
Ich Dummbatz, natürlich hab ich das Vergessen. Sorry... Hab irgendwie TGroup und TGroups verwechselt...
Könnte ich dann also auch ohne weiteres TGroup als Record deklarieren, oder sollte es ne Klasse sein?

Ich würde das so realisieren (reduziert auf Groups): ...
Hmm... Warum TGroup als Property,
wenn keine Getter und Setter noch was spezielles machen?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

  Alt 29. Jul 2010, 10:56
Damit die Instanz einzig und allein von der übergeordneten Klasse verwaltet wird (deshalb ja auch eine ReadOnly-Property).
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 cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#4

AW: kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

  Alt 29. Jul 2010, 12:15
Ok werd jetzt mal in mein Programm einbauen und sehen obs so klappt...
Nur trotzdem schade, das mein Konstrukt nicht funktioniert... hätte mich schon interessiert woran das wohl liegt...
aber da müsste ich wahrscheinlich ein wenig mehr Speicherkenntnisse für haben.

THX
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#5

AW: kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

  Alt 2. Aug 2010, 10:03
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄHHHHHHHHHHHHHHHHHHHHH

Hab nun also mein ganzes Konstrukt über der Haufen geworfen und das ganze mit TObjectList schön umgesetzt. So weit so gut. Danach schön in das Programm implementriert und...
JAWOHL, der Fehler ist immer noch derselbe... nun habe ich aber herausgefunden wo der Fehler liegt und zwar:

Delphi-Quellcode:
  TGroup = record
    name: string[50];
    ldappath: string[255];
  end;
wenn ich auf

Delphi-Quellcode:
  TGroup = record
    name: string;
    ldappath: string;
  end;
Ändere klappts einwandfrei.
Obwohl ich meines Wissens die Grössen nirgens überschreite...

Habs jetzt nicht getestet aber zu 99.9 % müsste mein ursprüngliches Konstrukt also doch funktionieren...

Kann mir jemand sagen warum das Probleme geben kann mit string[n] ?

LG
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

  Alt 2. Aug 2010, 10:04
AFAIK sind Shortstrings automatisch AnsiStrings. Ich habe das jetzt nicht in allen Einzelheiten verfolgt, aber möglicherweise liegt hier das Problem begründet.
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
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.492 Beiträge
 
Delphi 12 Athens
 
#7

AW: kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

  Alt 5. Aug 2010, 09:07
Wahrscheinlich liegt die Ursache an anderer Stelle.
Vermutlich wird irgendwo unbeabsichtet der Speicher deiner Objekte oder Strings freigegeben.
Wenn danach auf die Variablen zugegriffen wird, ist dort nichts mehr und AV.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

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

AW: kann dieses Konstrukt überhaupt funktionieren? (Arrays...)

  Alt 5. Aug 2010, 09:21
Moin,
[....]Wie in dem Kommentar vermerkt, kümmert sich TObjectList<T> standardmäßig um die Freigabe der enthaltenen Instanzen bei Delete, Clear und Free. Will man das nicht (z.B. weil nur Referenzen gespeichert werden sollen), muss man Create(false) verwenden. Das kann z.B. Sinn machen, wenn die Gruppen global verwaltet werden und die User nur Referenzen auf die Gruppen speichern. Dann muss man aber auch darauf achten, daß diese Referenzen entfernt werden, bevor die entsprechenden Gruppen freigegeben werden.
ich möchte noch was hinzufügen:
Guck dir mal Delphi-Referenz durchsuchenTList und Delphi-Referenz durchsuchenOwnObjects an. Das kümmert sich nämlich darum. Du könntest also statt x := TList<TFoo>.Create(false) einfach nachträglich x.OwnObjects := false setzen. Nur damit du den genaueren Hintergrund kennst.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 09:42 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