-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
16. Dez 2013
Aus diesem Grund hatte ich mir schon vor vielen Jahren mal gewünscht, daß diese Optionen standardmäßig in den Projektoptionen "erstmal" aktiviert sind (vorallem im Debug-Build).
Denn grade die Bereichsprüfungen würden viele Probleme lösen ... sehr viele Fragen hier (vorallem von Anfängern) sind auf Probleme mit falschen Indize zurückzuführen,
welche selbst gefunden worden wäre, wäre diese...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
16. Dez 2013
Das liegt nicht daran, daß es vergessen wurde.
In Delphi gibt es keine Stelle wo die Position aller Variablen registriert sind.
Auch gibt es keine Möglichkeiten nach Variablen zu suchen.
Systeme wie .Net oder JavaScript verwalten den Speicher anders, haben da praktisch eine Liste aller Variablen und können, wenn ein Interface freigegeben wird, einfach die restlichen Variablen suchen und...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
15. Dez 2013
Man muß dann nur die Referenzzählung richtig implementieren.
z.B.
- von den Unterkomponenten die Referenzzählung auf den obersten Knoten weiterleiten (bzs, an den Besitzer)
- Rückwärtsreferenzen aus der Referenzzählung ausnehmen
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
14. Dez 2013
bei Objekten:
Nein
und
Nein
Objekte mit TObjectList:
Nein
Ja
Interface mit Interfaces ode TObjectlist:
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
13. Dez 2013
Wenn der Speichermanager aufräumt, dann wird es auch knallen. Oder wenn inzwischen etwas Anderes an der Stelle steht, dann produziert man damit einen Buffer-Overrun,
wenn man auf ungültige Variablen zugreift.
Und das ist nicht erst seit Interfaces so.
var
o: TMyIrgendwas;
o := TMyIrgendwas.Create;
o.Free;
o.DoWas; // Fehler
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
13. Dez 2013
Dann liegt der Fehler aber auch bei dir.
Wenn du "referenzählende" Variablen hast, und du denen unterm Arsch weg die Objekte klaust, wovon die natürlich nichts mitbekommen,
dann können die nur davon ausgehen, daß die darin verlinkte Instanz gültig ist und es werden die Referenzen gezählt (bzw. es wird versucht).
- Entweder es wird über die Referenzzählung der Speicher freigegeben
- und...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
6. Dez 2013
Jupp, die funktioniert so, wie sie soll.
Aber, sobald von einem "referenzzählenden" Objekt eine Interface-Referenz "erzeugt" wurde, dann übernimmt die Referenzzählung die Kontrolle über die Speicherverwaltung.
Sobald dann die letzte Referenz weg ist, wird das Objekt freigegeben und dein Objektzeiger wird ungültig.
Ohne Interfacereferenzen bleibt die Speicherfreigabe dem .Free überlassen.
...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
6. Dez 2013
Ohhh mann, jetzt fällt es mir wie schuppen von den Augen .... noch ein Namespace davor. :wall:
Nur voll bescheuert, daß die Codevervollständigung nur nach Wortanfängen sucht und man jetzt nix mehr findet.
z.B. "SysUtils" > Strg+Enter > Namespace kopieren > Strg+F4 und reinkopieren ist doch keine Lösung, bis man sich den Mist endlich gemerkt hat.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
5. Dez 2013
Hab da nochmal reingesehn ... Joar, diese Basisklasse sollte gehn. (war nur durch den Owner etwas verwirrt, welcher da für die Referenzzählung verwendet wird)
System.Generics.Defaults gibt es bei mir nicht und wird es auch nicht geben. (Delphi wird langsam zu teuer)
Mist, gibt es doch, aber nur daheim und hier im XE noch nicht.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by himitsu,
5. Dez 2013
Wenn du mit Interfaces arbeiten willst, dann verwende die Objekte auch durchgängig nur als Interfaces, dann wirst du auch keine Probleme mit der Referenzzählöung bekommen.
fMy: IMyBase;
Oder du verwendest Klassen "ohne" Referenzzählung und regelst die Speicherverwaltung nur über das Objekt. (.Free)
Mir war so, als wenn Delphi schon eine Interface-Klasse ohne Referenzzählung besitzt...