Hallo Mavarik,
Delphi-Quellcode:
Var
S : TStream;
F : TStreamWrapper;
begin
S := TStream.Create;
F := TStreamWrapper(S);
...
S.Free; // Ruft F.Free auf und dann wird S.Free aufgerufen
end;
wieso sollte hier zweimal Free aufgerufen werden, es ist doch nur ein Objekt erzeugt worden. F und S zeigen doch auf das selbe Objekt, da TStreamWrapper(S) ja nur ein CAST ist.
Mir ist deine Motivation für diese Anforderung nicht klar.
Meine Wrapper-Klassen sehen eher so aus:
Delphi-Quellcode:
type
TStreamWrapper = class(TStream)
private
FStream: TStream;
FOwnsStream: Boolean;
...
public
constructor Create(Stream: TStream; OwnsStream: Boolean);
destructor Destroy; override;
...
end;
constructor TStreamWrapper.Create(Stream: TStream; OwnsStream: Boolean);
begin
inherited Create;
FStream := Stream;
FOwnsStream := OwnsStream;
end;
destructor TStreamWrapper.Destroy;
begin
if FOwnsStream then
FStream.Free;
inherited;
end;
var
S : TStream;
F : TStreamWrapper;
begin
S := TStream.Create;
F := TStreamWrapper.Create(S, True);
...
F.Free; // Ruft S.Free auf und dann wird F freigegeben
end;
Und dann ist auch klar wie die Freigabe erfolgt.
Deine Anforderung scheint noch ein Geheimis zu enthalten das du nicht mit uns teilen willst.