//The data class
class CBlockedData
{
public:
//Get number of calls
int GetNumberOfCalls()const
{
return ++m_iCalls;
}
//Get the data
char* GetData()const
{
return m_pData;
}
//Get the data size
int GetDataSize()const
{
return m_iDataSize;
}
//ctor and dtor
CBlockedData(const char* pData,
int iDataSize) : m_pData(NULL),
m_iDataSize(iDataSize),
m_iCalls(1)
{
//Do we have data
if (pData &&
m_iDataSize)
{
//Allocate and copy
m_pData=new char[m_iDataSize];
memcpy(m_pData,
pData,
m_iDataSize);
}
}
CBlockedData(const CBlockedData& rData) : m_pData(NULL),
m_iDataSize(rData.m_iDataSize),
m_iCalls(rData.m_iCalls)
{
//Do we have data
if (m_iDataSize && rData.m_pData)
{
//Allocate and copy
m_pData=new char[m_iDataSize];
memcpy(m_pData,
rData.m_pData,
m_iDataSize);
}
}
virtual ~CBlockedData()
{
//Delete the data
delete [] m_pData;
}
private:
//Our data
char* m_pData;
//Data size
int m_iDataSize;
//calls count
mutable int m_iCalls;
};