windows-nt/Source/XPSP1/NT/inetsrv/iis/staxinc/baseobj.h
2020-09-26 16:20:57 +08:00

57 lines
1.5 KiB
C++

/*==========================================================================*\
Module: baseobj.h
Copyright Microsoft Corporation 1996, All Rights Reserved.
Owner: mikepurt
Descriptions: Provide OLE COM consistent reference counting.
\*==========================================================================*/
#ifndef __BASEOBJ_H__
#define __BASEOBJ_H__
#include "dbgtrace.h" //make sure we get _ASSERT
class CBaseObject {
public:
CBaseObject()
{ m_lReferences = 1; }; // consistent with OLE COM
virtual ~CBaseObject() {};
// Included so the vtable is in a standard format ...
virtual HRESULT STDMETHODCALLTYPE QueryInterface(
IID FAR& riid,
LPVOID FAR* ppvObj) { return E_NOTIMPL; }
ULONG AddRef()
{ return (ULONG)(InterlockedExchangeAdd(&m_lReferences, 1) + 1); };
ULONG Release()
{
LONG lRef;
lRef = InterlockedExchangeAdd(&m_lReferences, -1) - 1;
_ASSERT(lRef >= 0);
_ASSERT(lRef < 0x00100000); // Sanity check against freed memory.
if (0 == lRef)
delete this; // Don't touch any member vars after this.
return (ULONG)lRef;
};
protected:
LONG m_lReferences;
CBaseObject(CBaseObject&); // Force an error in instances where a copy constructor
// was needed, but none was provided.
};
#endif // __BASEOBJ_H__