AGB  ·  Datenschutz  ·  Impressum  







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

[Objekt].Free Frage

Ein Thema von CReber · begonnen am 6. Jul 2004 · letzter Beitrag vom 8. Jul 2004
Antwort Antwort
Benutzerbild von CReber
CReber

Registriert seit: 26. Nov 2003
Ort: Berlin
343 Beiträge
 
Delphi 2006 Professional
 
#1

[Objekt].Free Frage

  Alt 6. Jul 2004, 12:15
Kann man sich das [Objekt].Free eigentlich sparen wenn man die procedure eh beendet? Soll heißen

Delphi-Quellcode:
  if EP > 0 then
    Mache das...
  else
    begin
      regist.free; < - Kann man sich das sparen?
      Exit;
    end;
  regist.CloseKey;
Die Frage ist rein Quelltextkürzend gemeint Weil somit würde ich ja 3 Zeilen Quellcode einsparen und das summiert sich ja....

// WICHTIG !

Das ist eine Timer Procedure ! Soll heißen die wird immer wieder aufgerufen aber regist wird im falle eines falles nie freigegeben...
Christian Reber
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: [Objekt].Free Frage

  Alt 6. Jul 2004, 12:23
NEIN

Ausnahme: COM Objekte. Die sind mit einem Referenzzähler behaftet. Wenn der Gültigkeitsbereich der
Instanzenvariabelen verlassen wird, wird der Referenzzähler automatisch dekrementiert. Ist der Referenzzähler bei 0 angekommen wird das COM Objekt freigegeben. Wenn ich das richtig verstanden habe liegt die Freigabe aber bei Windows. Stichwort: oleaut32.dll
I come from outer space to save the human race
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#3

Re: [Objekt].Free Frage

  Alt 6. Jul 2004, 12:25
objekte werden nicht automatisch beim verlassen einer prozedur frei gegeben. also mußt du sie freigeben.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [Objekt].Free Frage

  Alt 6. Jul 2004, 12:44
Moin Jens,

Zitat von Jens Schumann:
Wenn der Gültigkeitsbereich der Instanzenvariabelen verlassen wird, wird der Referenzzähler automatisch dekrementiert.
nach allem was ich bislang dazu gelesen habe, gibt es allerdings selbst hier Ausnahmen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: [Objekt].Free Frage

  Alt 6. Jul 2004, 12:46
Zitat von Christian Seehase:
nach allem was ich bislang dazu gelesen habe, gibt es allerdings selbst hier Ausnahmen.
Gib mal bitte eine Deiner Quellen an

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: [Objekt].Free Frage

  Alt 6. Jul 2004, 12:47
Zitat von Christian Seehase:
Moin Jens,

Zitat von Jens Schumann:
Wenn der Gültigkeitsbereich der Instanzenvariabelen verlassen wird, wird der Referenzzähler automatisch dekrementiert.
nach allem was ich bislang dazu gelesen habe, gibt es allerdings selbst hier Ausnahmen.
Ja stimmt. Habe ich in den Büchern von A. Kosch gelesen. Ich glaube zu erinnern (habe die Bücher z.Z. nicht dabei) das es mit const in einer Parameterübergabe zusammenhängt.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: [Objekt].Free Frage

  Alt 6. Jul 2004, 12:48
Moin sakura,

COM/DCOM/COM+ mit Delphi, von Andreas Kosch.
Eine präzise Angabe an welcher Stelle, muss ich Dir allerdings vorerst mal schuldig bleiben, die müsste ich erst noch raussuchen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#8

Re: [Objekt].Free Frage

  Alt 6. Jul 2004, 12:57
tipp:


Delphi-Quellcode:
with T???.Create do
  try
    if func(dasnf) then
       Exit; // --> gehe zum Finally-Block
    mach weiteres
  finally
    Free;
  end;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#9

Re: [Objekt].Free Frage

  Alt 7. Jul 2004, 22:55
Hallo Christian,

ich habe jenen Titel (lediglich den Vorgänger) von Herrn Kosch leider nicht gelesen, kann aber bestätigen, dass der Delphicompiler bei einem const Paramter keinen Code zur Referenzzählung und den damit verbundenen impliziten Try/Finally-Block generiert.
Dies kann uU einige Nebeneffekte haben, wenn man sich Signaturen der Art
Delphi-Quellcode:
procedure UsesRefCount(AnObject: IInterface);
procedure IgnoresRefCount(const AnObject: IInterface);
ansieht. Sollte man jene Routinen mit Objekten aufrufen, bei denen der Referenzzähler zuvor null betrug, gibt die erste Variante das Objekt selbsständig frei und die vorherige Referenz ist ungültig während die zweite Variante die Verantwortlichkeit des Speicherfreigabe dem Klienten überlässt.
Delphi-Quellcode:
var
  myObject: TInterfacedObject;
begin
  myObject := TInterfacedObject.Create;
  UsesRefCount(myObject);
  // myObject is still<>nil but already freed
  // myObject.Free could cause an error!
gegenüber der Variante 2
Delphi-Quellcode:
var
  myObject: TInterfacedObject;
begin
  myObject := TInterfacedObject.Create;
  try
    IgnoreRefCount(myObject);
    // myObject is untouched and has to be freed!
  finally
    FreeAndNil(myObject);
  end;
Selbiges gilt auch für Strings wobei dies keinen weiteren Eingriff seitens des Programmierers erfordert...
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: [Objekt].Free Frage

  Alt 8. Jul 2004, 00:30
Zitat:
Das ist eine Timer Procedure ! Soll heißen die wird immer wieder aufgerufen aber regist wird im falle eines falles nie freigegeben...
Wäre es dann nicht besser, wenn du die Variable einfach in die Private/Public Deklarationen deiner Form packst und sie erst freigibst, wenn du sie absolut nicht mehr brauchst?
Dani H.
  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 04:05 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