forked from metin2/client
62 lines
824 B
C++
62 lines
824 B
C++
#include "StdAfx.h"
|
|
#include "ReferenceObject.h"
|
|
|
|
CReferenceObject::CReferenceObject() : m_refCount(0), m_destructed(false)
|
|
{
|
|
}
|
|
|
|
CReferenceObject::~CReferenceObject()
|
|
{
|
|
}
|
|
|
|
void CReferenceObject::AddReference()
|
|
{
|
|
if (m_refCount == 0)
|
|
OnConstruct();
|
|
|
|
++m_refCount;
|
|
}
|
|
|
|
int CReferenceObject::GetReferenceCount()
|
|
{
|
|
return m_refCount;
|
|
}
|
|
|
|
void CReferenceObject::AddReferenceOnly()
|
|
{
|
|
++m_refCount;
|
|
}
|
|
|
|
void CReferenceObject::Release()
|
|
{
|
|
if (m_refCount > 1)
|
|
{
|
|
--m_refCount;
|
|
return;
|
|
}
|
|
|
|
assert(m_destructed == false);
|
|
assert(m_refCount >= 0);
|
|
m_refCount = 0;
|
|
OnSelfDestruct();
|
|
}
|
|
|
|
void CReferenceObject::OnConstruct()
|
|
{
|
|
m_destructed = false;
|
|
}
|
|
|
|
void CReferenceObject::OnSelfDestruct()
|
|
{
|
|
m_destructed = true;
|
|
delete this;
|
|
}
|
|
|
|
bool CReferenceObject::canDestroy()
|
|
{
|
|
if (m_refCount > 0)
|
|
return false;
|
|
|
|
return true;
|
|
}
|