knowL: Knowledge Libraries
Loading...
Searching...
No Matches
TrackedExplicitlySharedDataPointer.h
1#include <QExplicitlySharedDataPointer>
2
3#include "MemoryLeakTracker.h"
4
5namespace knowCore
6{
7 template <class T, bool enable_tracking>
9 {
10 public:
11 inline TrackedExplicitlySharedDataPointer() { track(); }
12 inline ~TrackedExplicitlySharedDataPointer() { untrack(); }
13
14 explicit TrackedExplicitlySharedDataPointer(T *data) Q_DECL_NOTHROW : d(data)
15 {
16 track();
17 }
19 {
20 track();
21 }
23 untrack();
24 d = o.d;
25 track();
26 return *this;
27 }
28
29 inline bool operator==(const TrackedExplicitlySharedDataPointer<T, enable_tracking>& o) const
30 {
31 return data() == o.data();
32 }
33
34 inline T &operator*() const { return *data(); }
35 inline T *operator->() { return data(); }
36 inline T *operator->() const { return data(); }
37 inline T *data() const { return d.data(); }
38 inline const T *constData() const { return d.constData(); }
39
40 private:
41 QExplicitlySharedDataPointer<T> d;
42 void track()
43 {
44 if(enable_tracking)
45 {
46 MemoryLeakTracker::instance()->reference(this->data(), this);
47 }
48 }
49 void untrack()
50 {
51 if(enable_tracking)
52 {
53 MemoryLeakTracker::instance()->dereference(this->data(), this);
54 }
55 }
56 };
57
58}
Definition TrackedExplicitlySharedDataPointer.h:9