#ifndef DynamicCreate_H
#define DynamicCreate_H
//////////////////////////////////////////////////////////////////////////
class DynamicCreate
{
public:
DynamicCreate();
void * operator new(size_t nSize);
void operator delete(void *);
bool Dynamic() const;
private:
long m_lDynamicCreate;
};
//////////////////////////////////////////////////////////////////////////
#endif
#include "DynamicCreate.h"
//////////////////////////////////////////////////////////////////////////
__declspec(thread) long gTlslDynamicCreate = 0;
//////////////////////////////////////////////////////////////////////////
DynamicCreate::DynamicCreate()
: m_lDynamicCreate(0)
{
m_lDynamicCreate = gTlslDynamicCreate;
gTlslDynamicCreate = 0;
}
bool DynamicCreate::Dynamic() const
{
return (m_lDynamicCreate != 0);
}
void * DynamicCreate::operator new(size_t nSize)
{
gTlslDynamicCreate = 1;
return ::new char[nSize];
}
void DynamicCreate::operator delete(void *obj)
{
::delete [] static_cast<char *>(obj);
}
//////////////////////////////////////////////////////////////////////////
使用方法,从DynamicCreate派生,调用Dynamic()便可知对象是否为动态创建。