]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/weakref.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxWeakRefDynamic<T>, wxWeakRef<T> 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  12     wxWeakRefDynamic<T> is a template class for weak references that is used in 
  13     the same way as wxWeakRef<T>. The only difference is that wxWeakRefDynamic 
  14     defaults to using @c dynamic_cast for establishing the object reference 
  15     (while wxWeakRef defaults to @c static_cast). 
  17     So, wxWeakRef will detect a type mismatch during compile time and will 
  18     have a little better run-time performance. The role of wxWeakRefDynamic 
  19     is to handle objects which derived type one does not know. 
  21     @note wxWeakRef<T> selects an implementation based on the static type of T. 
  22           If T does not have wxTrackable statically, it defaults to to a mixed- 
  23           mode operation, where it uses @c dynamic_cast as the last measure 
  24           (if available from the compiler and enabled when building wxWidgets). 
  26     For general cases, wxWeakRef<T> is the better choice. 
  28     For API documentation, see: wxWeakRef<T>. 
  37 class wxWeakRefDynamic
<T
> 
  46     wxWeakRef<T> is a template class for weak references to wxWidgets objects, 
  47     such as wxEvtHandler, wxWindow and wxObject. 
  48     A weak reference behaves much like an ordinary pointer, but when the object 
  49     pointed is destroyed, the weak reference is automatically reset to a @NULL pointer. 
  51     wxWeakRef<T> can be used whenever one must keep a pointer to an object 
  52     that one does not directly own, and that may be destroyed before the object 
  53     holding the reference. 
  55     wxWeakRef<T> is a small object and the mechanism behind it is fast 
  56     (@b O(1)). So the overall cost of using it is small. 
  61     wxWindow *wnd = new wxWindow( parent, wxID_ANY, "wxWindow" ); 
  62     wxWeakRef<wxWindow> wr = wnd; 
  63     wxWindowRef wr2 = wnd;        // Same as above, but using a typedef 
  64     // Do things with window 
  66     // Weak ref is used like an ordinary pointer 
  69     // Now the weak ref has been reset, so we don't risk accessing 
  70     // a dangling pointer: 
  74     wxWeakRef<T> works for any objects that are derived from wxTrackable. 
  75     By default, wxEvtHandler and wxWindow derive from wxTrackable. 
  76     However, wxObject does not, so types like wxFont and wxColour are not 
  77     trackable. The example below shows how to create a wxObject derived class 
  81     class wxMyTrackableObject : public wxObject, public wxTrackable 
  83         // ... other members here 
  87     The following types of weak references are predefined: 
  90     typedef wxWeakRef<wxEvtHandler>  wxEvtHandlerRef; 
  91     typedef wxWeakRef<wxWindow>      wxWindowRef; 
 100     @see wxSharedPtr<T>, wxScopedPtr<T> 
 103 class wxWeakRef
<T
> : public wxTrackerNode
 
 107         Constructor. The weak reference is initialized to @e pobj. 
 109     wxWeakRef(T
* pobj 
= NULL
); 
 114     wxWeakRef(const wxWeakRef
<T
>& wr
); 
 122         Called when the tracked object is destroyed. Be default sets 
 123         internal pointer to @NULL. 
 124         You need to call this method if you override it. 
 126     virtual void OnObjectDestroy(); 
 129         Release currently tracked object and rests object reference. 
 134         Returns pointer to the tracked object or @NULL. 
 139         Release currently tracked object and start tracking the same object as 
 142     T
* operator =(wxWeakRef
<T
>& wr
); 
 145         Implicit conversion to T*. 
 146         Returns pointer to the tracked object or @NULL. 
 148     T
* operator*() const; 
 151         Returns a reference to the tracked object. 
 152         If the internal pointer is @NULL this method will cause an assert in debug mode. 
 154     T
& operator*() const; 
 157         Smart pointer member access. 
 158         Returns a pointer to the tracked object. 
 159         If the internal pointer is @NULL this method will cause an assert in debug mode. 
 164         Releases the currently tracked object and starts tracking @e pobj. 
 165         A weak reference may be reset by passing @e @NULL as @e pobj. 
 167     T
* operator=(T
* pobj
);