TDME2  1.9.200
Reference.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <tdme/tdme.h>
6 
8 
9 /**
10  * Reference counter implementation to be used with inheritance
11  * @author Andreas Drewke
12  */
14 public:
15  // forbid class copy
17 
18  /**
19  * @brief Public constructor
20  */
21  inline Reference(): referenceCounter(0) {}
22 
23  /**
24  * @brief Destructor
25  */
26  inline virtual ~Reference() {}
27 
28  /**
29  * @brief Acquires a reference, incrementing the counter
30  */
31  virtual inline void acquireReference() {
32  AtomicOperations::increment(referenceCounter);
33  }
34 
35  /**
36  * @brief Releases a reference, thus decrementing the counter and delete it if reference counter is zero
37  */
38  virtual inline void releaseReference() {
39  if (AtomicOperations::decrement(referenceCounter) <= 0) {
40  onDelete();
41  delete this;
42  }
43  }
44 
45  /**
46  * Callback method to be overridden, will be called if object will be deleted
47  */
48  virtual void onDelete() {}
49 
50 private:
51  unsigned int referenceCounter;
52 };
Reference counter implementation to be used with inheritance.
Definition: Reference.h:13
virtual ~Reference()
Destructor.
Definition: Reference.h:26
virtual void releaseReference()
Releases a reference, thus decrementing the counter and delete it if reference counter is zero.
Definition: Reference.h:38
unsigned int referenceCounter
Definition: Reference.h:51
virtual void acquireReference()
Acquires a reference, incrementing the counter.
Definition: Reference.h:31
virtual void onDelete()
Callback method to be overridden, will be called if object will be deleted.
Definition: Reference.h:48
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6