AGB  ·  Datenschutz  ·  Impressum  







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

Zugriffsverletzung bei free?

Ein Thema von Hyperspacer · begonnen am 4. Mär 2007 · letzter Beitrag vom 8. Mär 2007
 
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Zugriffsverletzung bei free?

  Alt 5. Mär 2007, 07:29
Zitat von xaromz:
nur um das geradezurücken:
Zitat von SirTwist:
Mit diesem Code hier:
Delphi-Quellcode:
with TEdit.Create(form1) do begin
  ...
end;
legst Du zwar ein TEdit an und initialisierst du es, aber direkt nach dem End wird es wieder freigegeben, weil du es keiner Variablen zuweist. [...]
Diese Aussage ist natürlich Blödsinn. Das Objekt wird nicht freigegeben (Delphi-Klassen besitzen keine Referenzzählung und Delphi hat auch keinen GC). Es existiert nur keine Variable, mit der das Objekt angesprochen werden kann.
Ich setze noch einen drauf.

Zitat von SirTwist:
Wenn Du schon Controls on-the-fly erzeugen willst, musst Du sie in einer Variable speichern, und zwar keiner lokalen innerhalb der Prozedur, sondern innerhalb der aktuellen Klasse/des aktuellen Forms:
Delphi-Quellcode:
  tmp_edit := TEdit.Create(form1);
  with tmp_edit do begin
    tmp_edit.Parent := form1;
  end;
Nur der Vollständigkeit halber: Müssen muss er das nicht.

Da bei ihm Form1 der Owner vom Edit ist, ist das Edit über die Liste Form1.Components referenzierbar. Und weil Form1 der Parent vom Edit ist, ist das Edit ebenfalls in Form1.Controls greifbar. Dazu sollte allerdings sinnigerweise Edit.Name beim Createn belegt werden.


Zitat von SirTwist:
und dann spätestens im FormClose-Event:
  FreeAndNil(tmp_edit);
Auch nein. Weil das Form1 hier der Owner vom Edit ist, würde das Edit automatisch beim Freigeben der Form1 auch freigegeben werden.
Objekte vom Typ TComponent (bzw. dessen Ableitungen) zerstören die Komponenten, deren Owner sie sind, bei ihrer eigene Freigabe immer mit.
  Mit Zitat antworten Zitat
 


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 12:34 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