1 class IReferenceCounted
2 {
3 public:
4
5 IReferenceCounted():ReferenceCounter(1)
6 {
7 }
8
9 virtual ~IReferenceCounted()
10 {
11 }
12
13 void create() const { ++ReferenceCounter; }
14
15
16 bool drop() const
17 {
18 assert(ReferenceCounter > 0)
19
20 --ReferenceCounter;
21
22 if (!ReferenceCounter)
23 {
24 delete this;
25 return true;
26 }
27
28 return false;
29 }
30
31
32 int getReferenceCount() const
33 {
34 return ReferenceCounter;
35 }
36
37 private:
38
39 //! The reference counter. Mutable to do reference counting on const objects.
40 mutable int ReferenceCounter;
41 };
42
43 }
2 {
3 public:
4
5 IReferenceCounted():ReferenceCounter(1)
6 {
7 }
8
9 virtual ~IReferenceCounted()
10 {
11 }
12
13 void create() const { ++ReferenceCounter; }
14
15
16 bool drop() const
17 {
18 assert(ReferenceCounter > 0)
19
20 --ReferenceCounter;
21
22 if (!ReferenceCounter)
23 {
24 delete this;
25 return true;
26 }
27
28 return false;
29 }
30
31
32 int getReferenceCount() const
33 {
34 return ReferenceCounter;
35 }
36
37 private:
38
39 //! The reference counter. Mutable to do reference counting on const objects.
40 mutable int ReferenceCounter;
41 };
42
43 }
浙公网安备 33010602011771号