added tied scoped pointers
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23638 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
f0658b1e1e
commit
38f1526768
@ -86,11 +86,19 @@ Once again, in this cass \texttt{CLASSNAME} will be \texttt{TYPEPtr}.
|
|||||||
|
|
||||||
\membersection{wxScopedPtr::wxScopedPtr}
|
\membersection{wxScopedPtr::wxScopedPtr}
|
||||||
|
|
||||||
\func{}{wxScopedPtr}{\param{type}{ * T = NULL}}
|
\func{}{explicit wxScopedPtr}{\param{type}{ * T = NULL}}
|
||||||
|
|
||||||
Creates the smart pointer with the given pointer or none if NULL. On
|
Creates the smart pointer with the given pointer or none if {\tt NULL}. On
|
||||||
compilers that support it, this uses the explicit keyword.
|
compilers that support it, this uses the explicit keyword.
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxScopedPtr::\destruct{wxScopedPtr}
|
||||||
|
|
||||||
|
\func{}{\destruct{wxScopedPtr}}{\void}
|
||||||
|
|
||||||
|
Destructor frees the pointer help by this object if it is not {\t NULL}.
|
||||||
|
|
||||||
|
|
||||||
\membersection{wxScopedPtr::release}
|
\membersection{wxScopedPtr::release}
|
||||||
|
|
||||||
\func{T *}{release}{\void}
|
\func{T *}{release}{\void}
|
||||||
@ -108,6 +116,7 @@ Deletes the currently held pointer and sets it to {\it p} or to NULL if no
|
|||||||
arguments are specified. This function does check to make sure that the
|
arguments are specified. This function does check to make sure that the
|
||||||
pointer you are assigning is not the same pointer that is already stored.
|
pointer you are assigning is not the same pointer that is already stored.
|
||||||
|
|
||||||
|
|
||||||
\membersection{wxScopedPtr::operator *}
|
\membersection{wxScopedPtr::operator *}
|
||||||
|
|
||||||
\func{const T\&}{operator *}{\void}
|
\func{const T\&}{operator *}{\void}
|
||||||
@ -116,6 +125,7 @@ This operator works like the standard C++ pointer operator to return the object
|
|||||||
being pointed to by the pointer. If the pointer is NULL or invalid this will
|
being pointed to by the pointer. If the pointer is NULL or invalid this will
|
||||||
crash.
|
crash.
|
||||||
|
|
||||||
|
|
||||||
\membersection{wxScopedPtr::operator -$>$} % TODO
|
\membersection{wxScopedPtr::operator -$>$} % TODO
|
||||||
|
|
||||||
\func{const T*}{operator -$>$}{\void} % TODO
|
\func{const T*}{operator -$>$}{\void} % TODO
|
||||||
@ -123,6 +133,7 @@ crash.
|
|||||||
This operator works like the standard C++ pointer operator to return the pointer
|
This operator works like the standard C++ pointer operator to return the pointer
|
||||||
in the smart pointer or NULL if it is empty.
|
in the smart pointer or NULL if it is empty.
|
||||||
|
|
||||||
|
|
||||||
\membersection{wxScopedPtr::get}
|
\membersection{wxScopedPtr::get}
|
||||||
|
|
||||||
\func{const T*}{get}{\void}
|
\func{const T*}{get}{\void}
|
||||||
@ -130,6 +141,7 @@ in the smart pointer or NULL if it is empty.
|
|||||||
This operator gets the pointer stored in the smart pointer or returns NULL if
|
This operator gets the pointer stored in the smart pointer or returns NULL if
|
||||||
there is none.
|
there is none.
|
||||||
|
|
||||||
|
|
||||||
\membersection{wxScopedPtr::swap}
|
\membersection{wxScopedPtr::swap}
|
||||||
|
|
||||||
\func{\void}{swap}{\param{wxScopedPtr}{ \& other}}
|
\func{\void}{swap}{\param{wxScopedPtr}{ \& other}}
|
||||||
@ -137,3 +149,50 @@ there is none.
|
|||||||
Swap the pointer inside the smart pointer with {\it other}. The pointer being
|
Swap the pointer inside the smart pointer with {\it other}. The pointer being
|
||||||
swapped must be of the same type (hence the same class name).
|
swapped must be of the same type (hence the same class name).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%% wxScopedTiedPtr %%%%%%%
|
||||||
|
\section{\class{wxScopedTiedPtr}}\label{wxscopedtiedptr}
|
||||||
|
|
||||||
|
This is a variation on the topic of \helpref{wxScopedPtr}{wxscopedptr}. This
|
||||||
|
class is also a smart pointer but in addition it ``ties'' the pointer value to
|
||||||
|
another variable. In other words, during the life time of this class the value
|
||||||
|
of that variable is set to be the same as the value of the pointer itself and
|
||||||
|
it is reset to its old value when the object is destroyed. This class is
|
||||||
|
especially useful when converting the existing code (which may already store
|
||||||
|
the pointers value in some variable) to the smart pointers.
|
||||||
|
|
||||||
|
\wxheading{Example}
|
||||||
|
|
||||||
|
\wxheading{Derives from}
|
||||||
|
|
||||||
|
\helpref{wxScopedPtr}{wxscopedptr}
|
||||||
|
|
||||||
|
\wxheading{Include files}
|
||||||
|
|
||||||
|
<wx/ptr\_scpd.h>
|
||||||
|
|
||||||
|
\latexignore{\rtfignore{\wxheading{Members}}}
|
||||||
|
|
||||||
|
\membersection{wxScopedTiedPtr::wxScopedTiedPtr}\label{wxscopedtiedptrctor}
|
||||||
|
|
||||||
|
\func{}{wxScopedTiedPtr}{\param{T **}{ppTie}, \param{T *}{ptr}}
|
||||||
|
|
||||||
|
Constructor creates a smart pointer initialized with \arg{ptr} and stores
|
||||||
|
\arg{ptr} in the location specified by \arg{ppTie} which must not be
|
||||||
|
{\tt NULL}.
|
||||||
|
|
||||||
|
\membersection{wxScopedTiedPtr::\destruct{wxScopedTiedPtr}}\label{wxscopedtiedptrdtor}
|
||||||
|
|
||||||
|
\func{}{\destruct{wxScopedTiedPtr}}{\void}
|
||||||
|
|
||||||
|
Destructor frees the pointer help by this object and restores the value stored
|
||||||
|
at the tied location (as specified in the \helpref{constructor}{wxscopedtiedptrctor})
|
||||||
|
to the old value.
|
||||||
|
|
||||||
|
Warning: this location may now contain an uninitialized value if it hadn't been
|
||||||
|
initialized previously, in particular don't count on it magically being
|
||||||
|
{\tt NULL}!
|
||||||
|
|
||||||
|
|
||||||
|
@ -182,5 +182,32 @@ void name::reset(T * p){ \
|
|||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// "Tied" scoped pointer: same as normal one but also sets the value of
|
||||||
|
// some other variable to the pointer value
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define wxDEFINE_TIED_SCOPED_PTR_TYPE(T) \
|
||||||
|
wxDEFINE_SCOPED_PTR_TYPE(T); \
|
||||||
|
class T ## TiedPtr : public T ## Ptr \
|
||||||
|
{ \
|
||||||
|
public: \
|
||||||
|
T ## TiedPtr(T **pp, T *p) \
|
||||||
|
: T ## Ptr(p), m_pp(pp) \
|
||||||
|
{ \
|
||||||
|
m_pOld = *pp; \
|
||||||
|
*pp = p; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
~ T ## TiedPtr() \
|
||||||
|
{ \
|
||||||
|
*m_pp = m_pOld; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
private: \
|
||||||
|
T **m_pp; \
|
||||||
|
T *m_pOld; \
|
||||||
|
}
|
||||||
|
|
||||||
#endif // __WX_SCOPED_POINTER__
|
#endif // __WX_SCOPED_POINTER__
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user