]>
Commit | Line | Data |
---|---|---|
23324ae1 | 1 | ///////////////////////////////////////////////////////////////////////////// |
664e1314 | 2 | // Name: sharedptr.h |
e54c96f1 | 3 | // Purpose: interface of wxSharedPtr<T> |
23324ae1 FM |
4 | // Author: wxWidgets team |
5 | // RCS-ID: $Id$ | |
6 | // Licence: wxWindows license | |
7 | ///////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | /** | |
664e1314 | 10 | A smart pointer with non-intrusive reference counting. |
7c913512 | 11 | |
664e1314 VZ |
12 | It is modeled after @c boost::shared_ptr<> and can be used with STL |
13 | containers and wxVector<T> unlike @c std::auto_ptr<> and wxScopedPtr<T>. | |
7c913512 | 14 | |
23324ae1 | 15 | @library{wxbase} |
9fa8c9bf | 16 | @category{smartpointers} |
7c913512 | 17 | |
73473b3e | 18 | @see wxScopedPtr<T>, wxWeakRef<T>, wxObjectDataPtr<T> |
23324ae1 | 19 | */ |
9fa8c9bf | 20 | template<typename T> |
7c913512 | 21 | class wxSharedPtr<T> |
23324ae1 FM |
22 | { |
23 | public: | |
23324ae1 | 24 | /** |
9fa8c9bf VS |
25 | Constructor. |
26 | ||
27 | Creates shared pointer from the raw pointer @a ptr and takes ownership | |
28 | of it. | |
23324ae1 | 29 | */ |
b1b95a65 | 30 | wxEXPLICIT wxSharedPtr(T* ptr = NULL); |
9fa8c9bf | 31 | |
b1b95a65 FM |
32 | /** |
33 | Copy constructor. | |
34 | */ | |
9fa8c9bf | 35 | wxSharedPtr(const wxSharedPtr<T>& tocopy); |
23324ae1 FM |
36 | |
37 | /** | |
38 | Destructor. | |
39 | */ | |
5cb947fd | 40 | ~wxSharedPtr(); |
23324ae1 FM |
41 | |
42 | /** | |
43 | Returns pointer to its object or @NULL. | |
44 | */ | |
328f5751 | 45 | T* get() const; |
23324ae1 FM |
46 | |
47 | /** | |
7c913512 | 48 | Conversion to a boolean expression (in a variant which is not |
664e1314 | 49 | convertible to anything but a boolean expression). |
b1b95a65 FM |
50 | |
51 | If this class contains a valid pointer it will return @true, if it contains | |
52 | a @NULL pointer it will return @false. | |
23324ae1 | 53 | */ |
328f5751 | 54 | operator unspecified_bool_type() const; |
23324ae1 FM |
55 | |
56 | /** | |
b1b95a65 FM |
57 | Returns a reference to the object. |
58 | ||
59 | If the internal pointer is @NULL this method will cause an assert in debug mode. | |
23324ae1 | 60 | */ |
328f5751 | 61 | T operator*() const; |
23324ae1 FM |
62 | |
63 | /** | |
64 | Returns pointer to its object or @NULL. | |
65 | */ | |
b1b95a65 | 66 | T* operator->() const; |
23324ae1 FM |
67 | |
68 | /** | |
b1b95a65 FM |
69 | Assignment operator. |
70 | ||
71 | Releases any previously held pointer and creates a reference to @a ptr. | |
23324ae1 | 72 | */ |
b1b95a65 | 73 | wxSharedPtr<T>& operator=(T* ptr); |
23324ae1 FM |
74 | |
75 | /** | |
b1b95a65 FM |
76 | Assignment operator. |
77 | ||
78 | Releases any previously held pointer and creates a reference to the | |
79 | same object as @a topcopy. | |
80 | */ | |
78e37b46 | 81 | wxSharedPtr<T>& operator=(const wxSharedPtr<T>& tocopy); |
b1b95a65 FM |
82 | |
83 | /** | |
84 | Reset pointer to @a ptr. | |
85 | ||
86 | If the reference count of the previously owned pointer was 1 it will be deleted. | |
23324ae1 | 87 | */ |
4cc4bfaf | 88 | void reset(T* ptr = NULL); |
23324ae1 FM |
89 | |
90 | /** | |
91 | Returns @true if this is the only pointer pointing to its object. | |
92 | */ | |
328f5751 | 93 | bool unique() const; |
23324ae1 FM |
94 | |
95 | /** | |
96 | Returns the number of pointers pointing to its object. | |
97 | */ | |
328f5751 | 98 | long use_count() const; |
23324ae1 | 99 | }; |
e54c96f1 | 100 |