17#ifndef INCLUDED_vrpn_OwningPtr_h_GUID_A2A96325_1863_458B_A567_6FD968CB1321
18#define INCLUDED_vrpn_OwningPtr_h_GUID_A2A96325_1863_458B_A567_6FD968CB1321
34 void operator()(T* ptr)
const {
38 std::cerr <<
"DefaultDeleter: delete failed" << std::endl;;
45 void operator()(T* ptr)
const {
49 std::cerr <<
"DefaultDeleter: delete failed" << std::endl;;
74 template <
typename T,
typename D = DefaultDeleter<T> >
class OwningPtr {
76 typedef T element_type;
77 typedef T& reference_type;
78 typedef D deleter_type;
79 typedef typename traits::OwningPtrPointerType<T>::type pointer;
105 invokeDeleter(oldPtr);
118 void swap(
type& other) { std::swap(p_, other.p_); }
121 pointer
get()
const {
return p_; }
127 "attempt to use operator-> on a null pointer");
135 "attempt to use operator* on a null pointer");
140 bool valid()
const {
return p_ != NULL; }
144 typedef pointer type::*unspecified_bool_type;
145 operator unspecified_bool_type()
const
147 return valid() ? &type::p_ : NULL;
157 void invokeDeleter(pointer p) { deleter_type()(p); }
167 template <
typename T,
typename D>
168 inline void swap(OwningPtr<T, D>& lhs, OwningPtr<T, D>& rhs)
173 template <
typename T,
typename D>
174 inline typename traits::OwningPtrPointerType<T>::type
175 get_pointer(OwningPtr<T, D>
const& ptr)
180 template <
typename T,
typename D1,
typename D2>
181 inline bool operator==(OwningPtr<T, D1>
const& lhs,
182 OwningPtr<T, D2>
const& rhs)
184 return lhs.get() == rhs.get();
187 template <
typename T,
typename D>
188 inline bool operator==(OwningPtr<T, D>
const& lhs,
189 typename traits::OwningPtrPointerType<T>::type rhs)
191 return lhs.get() == rhs;
194 template <
typename T,
typename D>
195 inline bool operator==(
typename traits::OwningPtrPointerType<T>::type lhs,
196 OwningPtr<T, D>
const& rhs)
198 return lhs == rhs.get();
201 template <
typename T,
typename D1,
typename D2>
202 inline bool operator!=(OwningPtr<T, D1>
const& lhs,
203 OwningPtr<T, D2>
const& rhs)
205 return lhs.get() != rhs.get();
207 template <
typename T,
typename D>
208 inline bool operator!=(OwningPtr<T, D>
const& lhs,
209 typename traits::OwningPtrPointerType<T>::type rhs)
211 return lhs.get() != rhs;
214 template <
typename T,
typename D>
215 inline bool operator!=(
typename traits::OwningPtrPointerType<T>::type lhs,
216 OwningPtr<T, D>
const& rhs)
218 return lhs != rhs.get();
~OwningPtr()
Destructor: deletes owned object, if any.
定义 vrpn_OwningPtr.h:96
pointer release()
Returns the held pointer without performing the delete action.
定义 vrpn_OwningPtr.h:110
bool valid() const
Checks pointer validity
定义 vrpn_OwningPtr.h:140
OwningPtr(pointer p)
定义 vrpn_OwningPtr.h:90
bool operator!() const
Redundant way of checking pointer validity
定义 vrpn_OwningPtr.h:152
reference_type operator*() const
Smart pointer operator
定义 vrpn_OwningPtr.h:132
OwningPtr()
Construct empty.
定义 vrpn_OwningPtr.h:83
void reset(pointer p=pointer())
定义 vrpn_OwningPtr.h:100
void swap(type &other)
Swap pointers with another OwningPtr of the same type.
定义 vrpn_OwningPtr.h:118
pointer get() const
Gets pointer value
定义 vrpn_OwningPtr.h:121
pointer operator->() const
Smart pointer operator overload
定义 vrpn_OwningPtr.h:124
default deleter
定义 vrpn_OwningPtr.h:33
Default trait.
定义 vrpn_OwningPtr.h:56
Header for assert macros.
#define VRPN_ASSERT_MSG(expr, msg)
Like VRPN_ASSERT(expr) but allows specification of a message to be included in the case of a failed a...
定义 vrpn_Assert.h:153