knowL: Knowledge Libraries
Loading...
Searching...
No Matches
knowl
src
knowCore
TrackedExplicitlySharedDataPointer.h
1
#include <QExplicitlySharedDataPointer>
2
3
#include "MemoryLeakTracker.h"
4
5
namespace
knowCore
6
{
7
template
<
class
T,
bool
enable_tracking>
8
class
TrackedExplicitlySharedDataPointer
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
}
18
inline
TrackedExplicitlySharedDataPointer
(
const
TrackedExplicitlySharedDataPointer<T, enable_tracking>
&o) : d(o.d)
19
{
20
track();
21
}
22
inline
TrackedExplicitlySharedDataPointer<T, enable_tracking>
& operator=(
const
TrackedExplicitlySharedDataPointer<T, enable_tracking>
&o) {
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
}
knowCore::TrackedExplicitlySharedDataPointer
Definition
TrackedExplicitlySharedDataPointer.h:9
Generated by
1.12.0