type myClass = class(TMyInterfacedObject) public destructor Destroy; override; end; destructor myClass.Destroy; begin do cleanup end; procedure MyProcedure; var IGuard: iInterface; begin ... IGuard := myClass.Create(acquire resources); .... end; // IGuard is automatically decremented here and myClass destructor is called