| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        weakref.h
 
- // Purpose:     interface of wxWeakRefDynamic<T>, wxWeakRef<T>
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     wxWeakRefDynamic<T> is a template class for weak references that is used in
 
-     the same way as wxWeakRef<T>. 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.
 
-     @note wxWeakRef<T> selects an implementation based on the static type of T.
 
-           If T does not have wxTrackable statically, it defaults 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, wxWeakRef<T> is the better choice.
 
-     For API documentation, see: wxWeakRef<T>.
 
-     @tparam T
 
-         The type to which the smart pointer points to.
 
-     @nolibrary
 
-     @category{smartpointers}
 
- */
 
- template<typename T>
 
- class wxWeakRefDynamic<T>
 
- {
 
- public:
 
- };
 
- /**
 
-     wxWeakRef<T> 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.
 
-     wxWeakRef<T> 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.
 
-     wxWeakRef<T> 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<wxWindow> 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<T> 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<wxEvtHandler>  wxEvtHandlerRef;
 
-     typedef wxWeakRef<wxWindow>      wxWindowRef;
 
-     @endcode
 
-     @tparam T
 
-         The type to which the smart pointer points to.
 
-     @nolibrary
 
-     @category{smartpointers}
 
-     @see wxSharedPtr<T>, wxScopedPtr<T>
 
- */
 
- template<typename T>
 
- class wxWeakRef<T> : public wxTrackerNode
 
- {
 
- public:
 
-     /// Type of the element stored by this reference.
 
-     typedef T element_type;
 
-     /**
 
-         Constructor. The weak reference is initialized to @e pobj.
 
-     */
 
-     wxWeakRef(T* pobj = NULL);
 
-     /**
 
-         Copy constructor.
 
-     */
 
-     wxWeakRef(const wxWeakRef<T>& wr);
 
-     /**
 
-         Destructor.
 
-     */
 
-     virtual ~wxWeakRef();
 
-     /**
 
-         Called when the tracked object is destroyed. Be default sets
 
-         internal pointer to @NULL.
 
-         You need to call this method if you override it.
 
-     */
 
-     virtual void OnObjectDestroy();
 
-     /**
 
-         Release currently tracked object and rests object reference.
 
-     */
 
-     void Release();
 
-     /**
 
-         Returns pointer to the tracked object or @NULL.
 
-     */
 
-     T* get() const;
 
-     /**
 
-         Release currently tracked object and start tracking the same object as
 
-         the wxWeakRef @e wr.
 
-     */
 
-     T* operator =(wxWeakRef<T>& wr);
 
-     /**
 
-         Implicit conversion to T*.
 
-         Returns pointer to the tracked object or @NULL.
 
-     */
 
-     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*() const;
 
-     /**
 
-         Smart pointer member access. Returns a pointer to the tracked object.
 
-         If the internal pointer is @NULL this method will cause an assert in debug mode.
 
-     */
 
-     T* operator->();
 
-     /**
 
-         Releases the currently tracked object and starts tracking @e pobj.
 
-         A weak reference may be reset by passing @e @NULL as @e pobj.
 
-     */
 
-     T* operator=(T* pobj);
 
- };
 
 
  |