[fpc-devel]Proposal for audo-destructors
Kalabukhov Alex
kalab at archit.vrn.ru
Sun Sep 12 15:05:51 CEST 2004
Do you need second C++ with pascal syntax? :)
Auto-destructors? It's very simple!!! :)
(*====================================================*)
unit uGC;
interface
type
IAutoObject = interface
function GetObject: TObject;
property AObject: TObject read GetObject;
end;
TAutoObject = class(TInterfacedObject, IAutoObject)
private
FObj: TObject;
public
constructor Create(Object_: TObject); virtual;
destructor Destroy; override;
function GetObject: TObject;
end;
function IObject(Object_: TObject): IAutoObject;
implementation
constructor TAutoObject.Create(Object_: TObject);
begin
FObj := Object_;
end;
destructor TAutoObject.Destroy;
begin
if FObj <> nil then
FObj.Free;
inherited;
end;
function TAutoObject.GetObject: TObject;
begin
Result := FObj;
end;
function IObject(Object_: TObject): IAutoObject;
begin
Result := TAutoObject.Create(Object_);
end;
end.
(*====================================================*)
Example:
var
Tmp: TMyClass;
begin
Tmp := IObject(TMyClass.Create).AObject as TMyObject;
end;
>Absence of automatic construction/destruction of
>classes is very painfull and it can significantly
>degrade the
>development process (i.e. smart pointers and RAII are
>impossible). It's one of the greatest flaws of Pascal
>relatevly to
>C (the second thing are Templates of cource). Are
>there any plans for serious language extensions in
>this way for "post
>2.0" releases of FPC ?
More information about the fpc-devel
mailing list