Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

Re: Destroy wird ohne Aufruf ausgeführt - total strange...

  Alt 14. Aug 2008, 11:15
Ich bin nun einfach mal so dreist und nutze deinen Quellcode, da der als Beispiel sehr gute passt
Delphi-Quellcode:
type
  ISomeInterface = interface
    procedure registerObject(aObject: TObject);
  end;

  TSomeInterface = class(TInterfacedObject, ISomeInterface)
  public
    FVar : TObject;
    procedure registerObject(aObject: TObject);
  end;


procedure TSomeInterface.registerObject(aObject: TObject);
begin
  FVar := aObject;
end,

// ...

procedure blaaa(aObject: TObject);
var
  tmp : TSomeInterface;
begin
  tmp := TSomeInterface.Create();
  tmp.registerObject(blub);

  // hier kommt nun die tolle Stelle
  FreeAndNil(tmp);
end;
So hab ich das in meinem Quellcode gemacht. Ich weiß nicht, was daran falsch sein soll bzw. es ist ja in so fern falsch, dass ab nach dem FreeAndNil(tmp) dann das Objekt blub ebenfalls zerstört wird. Auf das Objekt blub, welches irgendwo anders erzeugt worden ist, zeigt aber definitiv noch eine Referenz, da es in einer Liste (TList) eingetragen wurde. Ich weiß nun nicht, was genau das Interface mit meinem Objekten anstellt. Es kann ja nicht sein, dass auf alle Referenzen innerhalb es tmp-Objekts ein Free() oder FreeAndNil() automatisch angewendet wird?!

PS: Kennst du ein gutes Tutorial oder dergleichen, wo man das nachlesen kann?! Habe bisher eben noch kein gutes gefunden, wo drin stehst was wann und warum passiert!?

mit freundlichen Grüßen
Armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat