- 新增RefObject基类实现引用计数功能 - 新增RefPtr智能指针模板类 - 修改Texture和Shader类继承自RefObject - 替换原有std::shared_ptr为RefPtr - 更新相关代码中的指针操作
40 lines
820 B
C++
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);
|
|
}
|
|
|
|
}
|