17#ifndef INCLUDED_vrpn_OwningPtr_h_GUID_A2A96325_1863_458B_A567_6FD968CB1321
18#define INCLUDED_vrpn_OwningPtr_h_GUID_A2A96325_1863_458B_A567_6FD968CB1321
38 std::cerr <<
"DefaultDeleter: delete failed" << std::endl;;
49 std::cerr <<
"DefaultDeleter: delete failed" << std::endl;;
74 template <
typename T,
typename D = DefaultDeleter<T> >
class OwningPtr {
105 invokeDeleter(oldPtr);
118 void swap(
type& other) { std::swap(p_, other.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; }
147 return valid() ? &type::p_ : NULL;
167 template <
typename T,
typename D>
173 template <
typename T,
typename D>
180 template <
typename T,
typename D1,
typename D2>
184 return lhs.
get() == rhs.
get();
187 template <
typename T,
typename D>
191 return lhs.
get() == rhs;
194 template <
typename T,
typename D>
198 return lhs == rhs.
get();
201 template <
typename T,
typename D1,
typename D2>
205 return lhs.
get() != rhs.
get();
207 template <
typename T,
typename D>
211 return lhs.
get() != rhs;
214 template <
typename T,
typename D>
218 return lhs != rhs.
get();
A unique-ownership smart pointer, with the ability to transfer ownership, but only explicitly (aka,...
pointer get() const
Gets pointer value.
pointer operator->() const
Smart pointer operator overload.
traits::OwningPtrPointerType< T >::type pointer
OwningPtr()
Construct empty.
pointer type::* unspecified_bool_type
bool operator!() const
Redundant way of checking pointer validity.
void reset(pointer p=pointer())
Deletes the owned object, if any, and takes ownership of a new object, if one is passed.
OwningPtr(pointer p)
Construct with a raw pointer for a new object to take exclusive ownership of.
void swap(type &other)
Swap pointers with another OwningPtr of the same type.
~OwningPtr()
Destructor: deletes owned object, if any.
reference_type operator*() const
Smart pointer operator.
bool valid() const
Checks pointer validity.
pointer release()
Returns the held pointer without performing the delete action.
traits::OwningPtrPointerType< T >::type get_pointer(OwningPtr< T, D > const &ptr)
void swap(OwningPtr< T, D > &lhs, OwningPtr< T, D > &rhs)
bool operator==(OwningPtr< T, D1 > const &lhs, OwningPtr< T, D2 > const &rhs)
bool operator!=(OwningPtr< T, D1 > const &lhs, OwningPtr< T, D2 > const &rhs)
void operator()(T *ptr) const
void operator()(T *ptr) const
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...