Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*==========================================================================*\
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__
|