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
|