X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/23324ae1c7938ba904770fc456d3c07764b9c5e9..de022e4f1197d146e9bdd6aeb2ac0ee9cb217737:/interface/weakref.h diff --git a/interface/weakref.h b/interface/weakref.h index 96eabd5d23..903de9a876 100644 --- a/interface/weakref.h +++ b/interface/weakref.h @@ -1,78 +1,114 @@ ///////////////////////////////////////////////////////////////////////////// // Name: weakref.h -// Purpose: documentation for wxWeakRefDynamic class +// Purpose: interface of wxWeakRefDynamic // Author: wxWidgets team // RCS-ID: $Id$ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// /** - @class wxWeakRefDynamicT @wxheader{weakref.h} - - wxWeakRefDynamicT is a template class for weak references that is used in - the same way as wxWeakRefT. The only difference is that wxWeakRefDynamic - defaults to using @c dynamic_cast for establishing the object - reference (while wxWeakRef defaults to @c static_cast). - + + wxWeakRefDynamic is a template class for weak references that is used in + the same way as wxWeakRef. The only difference is that wxWeakRefDynamic + defaults to using @c dynamic_cast for establishing the object + reference (while wxWeakRef defaults to @c static_cast). + So, wxWeakRef will detect a type mismatch during compile time and will have a little better run-time performance. The role of wxWeakRefDynamic - is to handle objects which derived type one does not know. - - @b Note: wxWeakRefT selects an implementation based on the static type + is to handle objects which derived type one does not know. + + @note wxWeakRef selects an implementation based on the static type of T. If T does not have wxTrackable statically, it defaults to to a mixed- - mode operation, where it uses @c dynamic_cast as the last measure (if - available from the compiler and enabled when building wxWidgets). - - For general cases, wxWeakRefT is the better choice. - - For API documentation, see: wxWeakRef - + mode operation, where it uses @c dynamic_cast as the last measure (if + available from the compiler and enabled when building wxWidgets). + + For general cases, wxWeakRef is the better choice. + + For API documentation, see: wxWeakRef + @library{wxcore} @category{FIXME} */ -class wxWeakRefDynamic +template +class wxWeakRefDynamic { public: - + }; + /** - @class wxWeakRefT @wxheader{weakref.h} - - wxWeakRef is a template class for weak references to wxWidgets objects, - such as wxEvtHandler, wxWindow and + + wxWeakRef is a template class for weak references to wxWidgets objects, + such as wxEvtHandler, wxWindow and wxObject. A weak reference behaves much like an ordinary pointer, but when the object pointed is destroyed, the weak reference is - automatically reset to a @NULL pointer. - - wxWeakRefT can be used whenever one must keep a pointer to an object + automatically reset to a @NULL pointer. + + wxWeakRef can be used whenever one must keep a pointer to an object that one does not directly own, and that may be destroyed before the object - holding the reference. - - wxWeakRefT is a small object and the mechanism behind it is fast - (@b O(1)). So the overall cost of using it is small. + holding the reference. + + wxWeakRef is a small object and the mechanism behind it is fast + (@b O(1)). So the overall cost of using it is small. + + Example + @code + wxWindow *wnd = new wxWindow( parent, wxID_ANY, "wxWindow" ); + wxWeakRef wr = wnd; + wxWindowRef wr2 = wnd; // Same as above, but using a typedef + // Do things with window + wnd->Show( true ); + // Weak ref is used like an ordinary pointer + wr->Show( false ); + wnd->Destroy(); + // Now the weak ref has been reset, so we don't risk accessing + // a dangling pointer: + wxASSERT( wr==NULL ); + @endcode + + wxWeakRef works for any objects that are derived from wxTrackable. By default, + wxEvtHandler and wxWindow derive from wxTrackable. However, wxObject does not, so + types like wxFont and wxColour are not trackable. The example below shows how to + create a wxObject derived class that is trackable: + + @code + class wxMyTrackableObject : public wxObject, public wxTrackable + { + // ... other members here + }; + @endcode + + The following types of weak references are predefined: + + @code + typedef wxWeakRef wxEvtHandlerRef; + typedef wxWeakRef wxWindowRef; + @endcode + + @library{wxbase} @category{FIXME} - - @seealso - wxSharedPtr, wxScopedPtr + + @see wxSharedPtr, wxScopedPtr */ -class wxWeakRef +template +class wxWeakRef { public: /** Constructor. The weak reference is initialized to @e pobj. */ - wxWeakRefT(T* pobj = @NULL); + wxWeakRef(T* pobj = NULL); /** Destructor. */ - ~wxWeakRefT(); + ~wxWeakRef(); /** Called when the tracked object is destroyed. Be default sets @@ -88,7 +124,7 @@ public: /** Returns pointer to the tracked object or @NULL. */ - T * get(); + T* get() const; /** Release currently tracked object and start tracking the same object as @@ -100,13 +136,13 @@ public: Implicit conversion to T*. Returns pointer to the tracked object or @NULL. */ - T* operator*(); + T* operator*() const; /** Returns a reference to the tracked object. If the internal pointer is @NULL this method will cause an assert in debug mode. */ - T operator*(); + T operator*() const; /** Smart pointer member access. Returns a pointer to the @@ -121,3 +157,4 @@ public: */ T* operator=(T* pobj); }; +