42 lines
899 B
C++
42 lines
899 B
C++
#pragma once
|
||
|
||
#include <atomic>
|
||
#include <cstdint>
|
||
|
||
namespace extra2d {
|
||
|
||
// ============================================================================
|
||
// 侵入式引用计数基类
|
||
// 参考 Cocos2d-x 的 RefCounted 设计
|
||
// ============================================================================
|
||
class RefCounted {
|
||
public:
|
||
virtual ~RefCounted() = default;
|
||
|
||
// 增加引用计数
|
||
void addRef() {
|
||
++_referenceCount;
|
||
}
|
||
|
||
// 减少引用计数,当计数为0时删除对象
|
||
void release() {
|
||
if (--_referenceCount == 0) {
|
||
delete this;
|
||
}
|
||
}
|
||
|
||
// 获取当前引用计数
|
||
uint32_t getRefCount() const {
|
||
return _referenceCount.load();
|
||
}
|
||
|
||
protected:
|
||
// 构造函数,初始引用计数为1
|
||
RefCounted() : _referenceCount(1) {}
|
||
|
||
private:
|
||
std::atomic<uint32_t> _referenceCount;
|
||
};
|
||
|
||
} // namespace extra2d
|