1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Donation with Paypal!!!

    Go to your paypal account and send directly donation to [email protected]

    1 month - 10 $ - Standart VIP

    6 months - 20 $- Standart VIP

    1 year - 30 $- Standart VIP

    2 years - 50 $- Standart VIP

    Gold member for life - 150 $- Standart VIP

    High Vip (Standart VIP include) group please send PM or email to [email protected] for info

    After Donation please send email to [email protected]

  3. Donation Ways 2020


    Paysend
  4. Telegram

  5. Delphifan Magazine
Dismiss Notice

Donation with Paypal!!!

Go to your paypal account and send directly donation to [email protected]

1 month - 10 $ - Standart VIP

6 months - 20 $- Standart VIP

1 year - 30 $- Standart VIP

2 years - 50 $- Standart VIP

Gold member for life - 150 $- Standart VIP

High Vip (Standart VIP include) group please send PM or email to [email protected] for info

After Donation please send email to [email protected]

Dismiss Notice
For open hidden message no need write thanks, thank etc. Enough is click to like button on right side of thread.

Automatic Reference Counting in Delphi

Discussion in 'Delphi Programming' started by AdminDF, Sep 11, 2014.

  1. AdminDF
    Online

    AdminDFAdminDF is a Verified Member Delphifan Staff Member DF Staff

    a tiny module to manage a 'garbage collector' in Delphi ... :)


    Code:
    unit MemoryGuard;
    
    interface
    
    type
    { IGuardObject }
    IGuardObject = interface(IUnknown)
    function Obj : Pointer;
    end;
    
    function Guard(aInstance : TObject) : IGuardObject;
    
    implementation
    
    type
    { TGuardObject }
    TGuardObject = class(TInterfacedObject, IGuardObject)
    private
    fInstance : TObject;
    public
    function Obj : Pointer;
    constructor Create(aInstance : TObject);
    destructor Destroy; override;
    end;
    
    { TGuardObject }
    
    // _____________________________________________________________________________
    constructor TGuardObject.Create(aInstance : TObject);
    begin
    fInstance := aInstance;
    end;
    
    // _____________________________________________________________________________
    destructor TGuardObject.Destroy;
    begin
    fInstance.Free;
    inherited;
    end;
    
    // _____________________________________________________________________________
    function TGuardObject.Obj : Pointer;
    begin
    result := fInstance;
    end;
    
    // _____________________________________________________________________________
    function Guard(aInstance : TObject) : IGuardObject;
    begin
    result := TGuardObject.Create(aInstance);
    end;
    
    end.
    
    ============================================================================
    
    // ReportMemoryLeaksOnShutdown := true; => in project source
    
    // _____________________________________________________________________________
    procedure TForm24.FormCreate(Sender : TObject);
    begin
    // create a TStringlist with 'Guard'
    list := Guard(TStringlist.Create).obj;
    fill1; // fill list
    
    // show content
    ShowMessage( 'Message 1'#13#10 + list.Text );
    // list.Free => no need to release the object
    
    // exemple 2
    list := Guard(TStringlist.Create).obj;
    list.Add('---------------');
    list.Add('memory frees itself');
    list.Add('---------------');
    
    // show content
    ShowMessage( 'Message 2'#13#10 + list.Text );
    // list.Free => no need to release the object
    end;
    
    // _____________________________________________________________________________
    procedure TForm24.fill1;
    var
    i : integer;
    begin
    for i := 0 to 10 do
    list.Add('item ' + IntToStr(i));
    end;
    
     
  2. serdarbala
    Offline

    serdarbala Guest

    RE:

    Merak ettim bu compenet nedir diye
     

Share This Page