AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Oject neu instanzieren ohne vorher zu deinstanzieren
Thema durchsuchen
Ansicht
Themen-Optionen

Oject neu instanzieren ohne vorher zu deinstanzieren

Ein Thema von Gambit · begonnen am 6. Mai 2005 · letzter Beitrag vom 6. Mai 2005
Antwort Antwort
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

Oject neu instanzieren ohne vorher zu deinstanzieren

  Alt 6. Mai 2005, 14:23
Hi,

was passiert eigentlich, wenn ich ein Object mit gleicher Objectvariable neu instanziere, ohne das alte vorher deinstanziert zu haben?

Beispiel:

Ich schreibe eine Klasse Txy, die zum Beispiel die Property MyValue hat.

Ich möchte beim Start meines Programs diese Property der Klasse Txy mit einem Wert aus einer Ini-Datei belegen, auf den ich während der gesamten Laufzeit des Programms zugreifen kann.

Delphi-Quellcode:
ini:= TIniFile.create('Path');
NewXY:= Txy.create;

Try
  NewXY.MyValue:= ini.ReadString('MySection', 'MyIdent', '')
Finally
  ini.free
end;
NewXY darf ich ja, soweit ich das richtig verstehe, jetzt nicht deinstanzieren, da ich sonst auch meinen Wert in der Property verlieren würde, oder seh ich das jetzt falsch? Ich würde also hingehen und NewXY deinstanzieren, wenn ich das Programm beende.

Was würde aber nun passieren, wenn ich den Wert für die Property während der Laufzeit ändern wollte und das täte, indem ich den Wert vorher in der Ini-Datei überschreibe und genauso wie in dem Code oben beschrieben wieder der Property neu zuordne?
Ich hätte dann ja eine neue Instanz von NewXY ohne die alte deinstanziert zu haben. Oder wird die alte Instanz dann einfach überschrieben? Und bei Programmende alles richtig freigegeben?
Oder muss ich zwingend jedesmal die alte Instanz deinstanzieren ehe ich die neue instanziere?

Gruß

Gambit
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Oject neu instanzieren ohne vorher zu deinstanzieren

  Alt 6. Mai 2005, 14:28
Zitat:
Hi,

was passiert eigentlich, wenn ich ein Object mit gleicher Objectvariable neu instanziere, ohne das alte vorher deinstanziert zu haben?
Speicher Loch ?
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von rwachtel
rwachtel

Registriert seit: 26. Aug 2004
Ort: Köln
530 Beiträge
 
RAD-Studio 2010 Pro
 
#3

Re: Oject neu instanzieren ohne vorher zu deinstanzieren

  Alt 6. Mai 2005, 14:31
In dem Zusammenhang sollte man vielleicht auch das Stichwort Singleton erwähnen.
Robert Wachtel
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Oject neu instanzieren ohne vorher zu deinstanzieren

  Alt 6. Mai 2005, 14:34
ganz eindeutig ein speicher leck.
das wäre das gleich wie
TIrgendwas.Create; also das man die instanz gar keiner varialben zu weist. Damit wird zwar die instanz erstellt, somit auch speicher dafür reserviert aber die instanz wird nie verwendet weil man sich nicht sicher an welcher stelle im speicher die instanz gelandet ist.

Wenn du also einfach neu instanzierst schmeist du den Merker der speicheradresse von dem bereits instanzierten object weg. Somit weißt du natürlich auch nicht mehr wo was freigegeben werden muss und es ist ein speicherleck entstanden.

Um jetzt irgendwelche unsinnigen Diskusionen zu vermeiden:
- Ja ich weiß das ein Object sich auch selbst freigeben kann (also kein pointer auf die instanz benötigt wird)
- Ja ich weiß auch das man bei obigen kleinen Beispielcode ein "with" drum herum schreiben kann um somit auf die instanz zu zugreifen....
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#5

Re: Oject neu instanzieren ohne vorher zu deinstanzieren

  Alt 6. Mai 2005, 14:44
Ja, das mit dem Speicherleck hatte ich mir schon gedacht...

Ist es denn zunächste erst einmal richtig gedacht, das Objekt erst mit Programmende zu deinstanzieren, weil ich ja während der gesamten Laufzeit auf die Property zugreifen will?

Und wenn die Klasse also mehrere Propertys hat, die alle aus einer Ini-Datei gefüttert werden, muss ich also beim Ändern nur einer Property die gesamten Ini-Datei neu einlesen bzw. alle Propertys neu belegen, weil ich ja auch jedesmal zuerst de- und dann neu instanzieren muss...achne, dass ist ja wohl nun auch wieder falsch gedacht...

wenn ich es nun so machen würde:

Delphi-Quellcode:
ini:= TIniFile.create('Path');
if not assigned(NewXY) then newXY:= Txy.create;

Try
  NewXY.MyValue:= ini.ReadString('MySection', 'MyIdent', '')
Finally
  ini.free
end;
  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 07:21 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