Libical API Documentation
3.0
Loading...
Searching...
No Matches
src
libical
icptrholder_cxx.h
Go to the documentation of this file.
1
42
#ifndef ICPTRHOLDER_CXX_H
43
#define ICPTRHOLDER_CXX_H
44
45
#include <cassert>
46
47
template
<
class
T >
class
ICPointerHolder
48
{
49
public
:
50
ICPointerHolder
()
51
: ptr(0)
52
{
53
}
54
55
ICPointerHolder
(T *p)
56
: ptr(p)
57
{
58
}
59
60
// copy constructor to support assignment
61
ICPointerHolder
(
const
ICPointerHolder
&ip)
62
: ptr(ip.ptr)
63
{
64
// We need to transfer ownership of ptr to this object by setting
65
// ip's ptr to null. Otherwise, ptr will de deleted twice.
66
// const ugliness requires us to do the const_cast.
67
ICPointerHolder
*ipp =
const_cast <
ICPointerHolder
*
>
(&ip);
68
69
ipp->ptr = 0;
70
};
71
72
~ICPointerHolder
()
73
{
74
release();
75
}
76
77
ICPointerHolder
&operator=(T *p)
78
{
79
this->release();
80
ptr = p;
81
return
*
this
;
82
}
83
84
ICPointerHolder
&operator=(
ICPointerHolder
&p)
85
{
86
this->release();
87
ptr = p.ptr;
// this transfer ownership of the pointer
88
p.ptr = 0;
// set it to null so the pointer won't get delete twice.
89
return
*
this
;
90
}
91
92
bool
operator!=(T *p)
93
{
94
return
(ptr != p);
95
}
96
97
bool
operator==(T *p)
98
{
99
return
(ptr == p);
100
}
101
102
operator
T *()
const
103
{
104
return
ptr;
105
}
106
107
T *operator->()
const
108
{
109
assert(ptr);
110
return
ptr;
111
}
112
113
T &operator*()
114
{
115
assert(ptr);
116
return
*ptr;
117
}
118
119
private
:
120
void
release()
121
{
122
if
(ptr != 0) {
123
ptr->detach();
124
delete
ptr;
125
126
ptr = 0;
127
}
128
}
129
130
T *ptr;
131
};
132
133
#endif
ICPointerHolder
Definition
icptrholder_cxx.h:48
Generated on Sun Mar 31 2024 06:42:58 for Libical API Documentation by
1.9.7