8 constexpr explicit SharedCounter(T* p =
nullptr) : ptr(p), share_count(1), weak_count(0) {}
10 constexpr void addShareCount() { share_count++; }
12 constexpr void addWeakCount() { weak_count++; }
14 constexpr int getShareCount()
const {
return share_count.load(); }
16 constexpr int getWeakCount()
const {
return weak_count.load(); }
18 constexpr T* get()
const {
return ptr; }
20 constexpr void release() {
21 if (--share_count == 0) {
24 if (weak_count == 0) {
30 constexpr void releaseWeak() {
31 if (--weak_count == 0 && share_count == 0) {
38 std::atomic_int share_count;
39 std::atomic_int weak_count;