Files
mtgodot-poc/extension/src/port/EterLib/ReferenceObject.cpp
T
shenleiandClaude Code b4c9d6cefc port(2V0-b): EterPythonLib 窗口树实现 + EterLib 资源层
- port: PythonWindow/PythonSlotWindow/PythonGridSlotWindow/PythonWindowManager(布局/命中/事件/插槽渲染)
- port: EterLib ReferenceObject/Resource/ResourceManager(资源引用与查找)
- platform: EterLib Util、EterPythonLib PythonGraphic
- tests: port.window_tree(需要解释器,不需要 40250 Client/pack)
- 顺带补上 4 个缺失的 Godot .uid

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 11:09:05 +09:00

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;
}