Add basic deleter support to wxSharedPtr<T>.
[wxWidgets.git] / interface / wx / sharedptr.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: sharedptr.h
3 // Purpose: interface of wxSharedPtr<T>
4 // Author: wxWidgets team
5 // Licence: wxWindows licence
6 /////////////////////////////////////////////////////////////////////////////
7
8 /**
9 A smart pointer with non-intrusive reference counting.
10
11 It is modelled after @c boost::shared_ptr<> and can be used with STL
12 containers and wxVector<T> unlike @c std::auto_ptr<> and wxScopedPtr<T>.
13
14 @library{wxbase}
15 @category{smartpointers}
16
17 @see wxScopedPtr<T>, wxWeakRef<T>, wxObjectDataPtr<T>
18 */
19 template<typename T>
20 class wxSharedPtr<T>
21 {
22 public:
23 /**
24 Constructor.
25
26 Creates shared pointer from the raw pointer @a ptr and takes ownership
27 of it.
28 */
29 wxEXPLICIT wxSharedPtr(T* ptr = NULL);
30
31 /**
32 Constructor.
33
34 Creates shared pointer from the raw pointer @a ptr and deleter @a d
35 and takes ownership of it.
36
37 @param ptr The raw pointer.
38 @param d Deleter - a functor that is called instead of delete to
39 free the @a ptr raw pointer when its reference count drops to
40 zero.
41
42 @since 3.0
43 */
44 template<typename Deleter>
45 wxEXPLICIT wxSharedPtr(T* ptr, Deleter d);
46
47 /**
48 Copy constructor.
49 */
50 wxSharedPtr(const wxSharedPtr<T>& tocopy);
51
52 /**
53 Destructor.
54 */
55 ~wxSharedPtr();
56
57 /**
58 Returns pointer to its object or @NULL.
59 */
60 T* get() const;
61
62 /**
63 Conversion to a boolean expression (in a variant which is not
64 convertible to anything but a boolean expression).
65
66 If this class contains a valid pointer it will return @true, if it contains
67 a @NULL pointer it will return @false.
68 */
69 operator unspecified_bool_type() const;
70
71 /**
72 Returns a reference to the object.
73
74 If the internal pointer is @NULL this method will cause an assert in debug mode.
75 */
76 T operator*() const;
77
78 /**
79 Smart pointer member access. Returns pointer to its object.
80
81 If the internal pointer is @NULL this method will cause an assert in debug mode.
82 */
83 T* operator->() const;
84
85 /**
86 Assignment operator.
87
88 Releases any previously held pointer and creates a reference to @a ptr.
89 */
90 wxSharedPtr<T>& operator=(T* ptr);
91
92 /**
93 Assignment operator.
94
95 Releases any previously held pointer and creates a reference to the
96 same object as @a topcopy.
97 */
98 wxSharedPtr<T>& operator=(const wxSharedPtr<T>& tocopy);
99
100 /**
101 Reset pointer to @a ptr.
102
103 If the reference count of the previously owned pointer was 1 it will be deleted.
104 */
105 void reset(T* ptr = NULL);
106
107 /**
108 Reset pointer to @a ptr.
109
110 If the reference count of the previously owned pointer was 1 it will be deleted.
111
112 @param ptr The new raw pointer.
113 @param d Deleter - a functor that is called instead of delete to
114 free the @a ptr raw pointer when its reference count drops to
115 zero.
116
117 @since 3.0
118 */
119 template<typename Deleter>
120 void reset(T* ptr, Deleter d);
121
122 /**
123 Returns @true if this is the only pointer pointing to its object.
124 */
125 bool unique() const;
126
127 /**
128 Returns the number of pointers pointing to its object.
129 */
130 long use_count() const;
131 };
132