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) { track(); }
15
inline
TrackedExplicitlySharedDataPointer
(
16
const
TrackedExplicitlySharedDataPointer<T, enable_tracking>
& o)
17
: d(o.d)
18
{
19
track();
20
}
21
inline
TrackedExplicitlySharedDataPointer<T, enable_tracking>
&
22
operator=(
const
TrackedExplicitlySharedDataPointer<T, enable_tracking>
& o)
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
knowCore::TrackedExplicitlySharedDataPointer
Definition
TrackedExplicitlySharedDataPointer.h:9
Generated by
1.12.0