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