2020-09-30 17:12:29 +02:00

83 lines
1.4 KiB
C++

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
RefObj.hxx
Abstract:
Generic base class for reference counted objects.
Author:
Mario Goertzel [MarioGo]
Revision History:
MarioGo 12-15-95 Bits in the 'ol bucket
--*/
#ifndef __REFERENCED_OBJECTS_HXX
#define __REFERENCED_OBJECTS_HXX
class CReferencedObject
{
public:
CReferencedObject()
: _references(0)
{
}
virtual ~CReferencedObject() { ASSERT(_references == 0); }
virtual void Reference()
{
ASSERT(_references >= 0);
_references++;
}
virtual DWORD Release()
{
if ( 0 == Dereference())
{
delete this;
return(0);
}
// this pointer maybe invalid here.
return(1);
}
LONG Dereference()
// Used for objects which override Release().
{
ASSERT(_references);
return(_references--);
}
DWORD References()
{
// Must be called an exclusive lock held or it is meaningless.
ASSERT(_references >= 0);
return(_references);
}
BOOL WillBeDeletedIfReleased()
{
return _references == 1;
}
private:
CInterlockedInteger _references; // BUGBUG: no real need for interlocking just now
// since all ops happen under global lock
};
#endif // __REFERENCED_OBJECTS_HXX