3 #include <cxx/type_traits>
13 template< typename U >
14 default_delete(default_delete<U> const &) {}
16 void operator () (T *p) const
20 template< typename T >
21 struct default_delete<T[]>
25 void operator () (T *p)
29 template< typename T, typename T_Del = default_delete<T> >
34 typedef _unspec* _unspec_ptr_type;
38 typedef T element_type;
39 typedef T_Del deleter_type;
41 unique_ptr() : _ptr(pointer()) {}
43 explicit unique_ptr(pointer p) : _ptr(p) {}
45 unique_ptr(unique_ptr &&o) : _ptr(o.release()) {}
47 ~unique_ptr() { reset(); }
49 unique_ptr &operator = (unique_ptr &&o)
55 unique_ptr &operator = (_unspec_ptr_type)
61 element_type &operator * () const { return *get(); }
62 pointer operator -> () const { return get(); }
64 pointer get() const { return _ptr; }
66 operator _unspec_ptr_type () const
67 { return reinterpret_cast<_unspec_ptr_type>(get()); }
76 void reset(pointer p = pointer())
80 deleter_type()(get());
85 unique_ptr(unique_ptr const &) = delete;
86 unique_ptr &operator = (unique_ptr const &) = delete;