Files
Frostbite2D/Frostbite2D/include/frostbite2D/base/RefPtr.h
Lenheart a09c344bb7 refactor(base): 引入引用计数智能指针系统替换std::shared_ptr
- 新增RefObject基类实现引用计数功能
- 新增RefPtr智能指针模板类
- 修改Texture和Shader类继承自RefObject
- 替换原有std::shared_ptr为RefPtr
- 更新相关代码中的指针操作
2026-03-17 04:50:15 +08:00

40 lines
820 B
C++

#pragma once
#include <frostbite2D/base/RefObject.h>
#include <frostbite2D/core/RefBasePtr.hpp>
namespace frostbite2D {
struct DefaultRefPtrPolicy {
void Retain(RefObject* ptr) {
if (ptr) {
ptr->Retain();
}
}
void Release(RefObject* ptr) {
if (ptr) {
ptr->Release();
}
}
};
template <typename T>
using RefPtr = RefBasePtr<T, DefaultRefPtrPolicy>;
template <typename T, typename... Args>
RefPtr<T> MakePtr(Args&&... args) {
static_assert(std::is_base_of<RefObject, T>::value,
"T must be derived from RefObject");
return RefPtr<T>(new T(std::forward<Args>(args)...));
}
template <typename T>
RefPtr<T> MakePtr(T* ptr) {
static_assert(std::is_base_of<RefObject, T>::value,
"T must be derived from RefObject");
return RefPtr<T>(ptr);
}
}