X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/328f5751e8a06727b137189fe04891a9f43bfc8b..3ed3a1c846d66410872a15f746c432311e306e42:/interface/weakref.h diff --git a/interface/weakref.h b/interface/weakref.h index d5ab880924..03a9663130 100644 --- a/interface/weakref.h +++ b/interface/weakref.h @@ -1,17 +1,16 @@ ///////////////////////////////////////////////////////////////////////////// // 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 + 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). @@ -19,18 +18,19 @@ 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 + @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 general cases, wxWeakRef is the better choice. - For API documentation, see: wxWeakRef + For API documentation, see: wxWeakRef @library{wxcore} @category{FIXME} */ +template class wxWeakRefDynamic { public: @@ -38,8 +38,8 @@ public: }; + /** - @class wxWeakRefT @wxheader{weakref.h} wxWeakRef is a template class for weak references to wxWidgets objects, @@ -48,35 +48,72 @@ public: 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 + 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 + 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 */ +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 - internal pointer to @NULL. + internal pointer to @NULL. You need to call this method if + you override it. */ virtual void OnObjectDestroy(); @@ -121,3 +158,4 @@ public: */ T* operator=(T* pobj); }; +