kDB: Knowledge DataBase
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) { track(); }
17 : d(o.d)
18 {
19 track();
20 }
23 {
24 untrack();
25 d = o.d;
26 track();
27 return *this;
28 }
29
30 inline bool operator==(const TrackedExplicitlySharedDataPointer<T, enable_tracking>& o) const
31 {
32 return data() == o.data();
33 }
34
35 inline T& operator*() const { return *data(); }
36 inline T* operator->() { return data(); }
37 inline T* operator->() const { return data(); }
38 inline T* data() const { return d.data(); }
39 inline const T* constData() const { return d.constData(); }
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} // namespace knowCore
Definition TrackedExplicitlySharedDataPointer.h:9