Files
XCEngine/docs/api/resources/resourcehandle/resourcehandle.md

2.7 KiB
Raw Blame History

ResourceHandle

命名空间: XCEngine::Resources

类型: class (template)

描述: 模板资源句柄类,提供资源的引用计数式安全访问,自动管理资源的加载和释放。

概述

ResourceHandle<T> 是一个模板句柄类,用于安全地持有对资源的引用。它通过 ResourceManager 自动管理引用计数:当句柄被创建时引用计数增加,当句柄被销毁或调用 Reset() 时引用计数减少。这确保了资源在其仍被使用时不会被卸载。

模板参数

参数 约束 描述
T 必须派生自 IResource 资源类型

公共方法

方法 描述
ResourceHandle() = default 默认构造空句柄
explicit ResourceHandle(T* resource) 从裸指针构造(自动增加引用)
ResourceHandle(const ResourceHandle& other) 拷贝构造(自动增加引用)
ResourceHandle(ResourceHandle&& other) noexcept 移动构造
~ResourceHandle() 析构函数(自动调用 Reset
ResourceHandle& operator=(const ResourceHandle& other) 拷贝赋值(自动管理引用)
ResourceHandle& operator=(ResourceHandle&& other) noexcept 移动赋值
T* Get() const 获取裸指针
T* operator->() const 通过指针访问资源成员
T& operator*() const 解引用获取资源引用
bool IsValid() const 检查句柄是否持有有效资源
explicit operator bool() const 隐式布尔转换
ResourceGUID GetGUID() const 获取资源的全局唯一标识符
ResourceType GetResourceType() const 获取资源类型
void Reset() 释放当前资源引用
void Swap(ResourceHandle& other) 交换两个句柄的内容

比较运算

运算符 描述
operator==(ResourceHandle, ResourceHandle) 比较 GUID 是否相等
operator!=(ResourceHandle, ResourceHandle) 比较 GUID 是否不等

使用示例

// 加载资源(引用计数 +1
ResourceHandle<Texture> tex = ResourceManager::Get().Load<Texture>("textures/player.png");

// 检查有效性
if (tex.IsValid()) {
    // 安全访问资源
    uint32_t width = tex->GetWidth();
}

// 拷贝句柄(引用计数 +1
ResourceHandle<Texture> tex2 = tex;

// 移动句柄
ResourceHandle<Texture> tex3 = std::move(tex2);

// 句柄离开作用域时自动释放(引用计数 -1
tex.Reset();  // 手动释放

相关文档