added and documented wxDEFINE_SCOPED_PTR_TYPE; improved docs a bit
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23604 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,9 +1,15 @@
|
|||||||
\section{\class{wxScopedPtr}}\label{wxscopedptr}
|
\section{\class{wxScopedPtr}}\label{wxscopedptr}
|
||||||
|
|
||||||
This is a simple scoped smart pointer implementation that is similar to
|
This is a simple scoped smart pointer implementation that is similar to
|
||||||
the \urlref{Boost}{http://www.boost.org} smart pointers but rewritten to
|
the \urlref{Boost}{http://www.boost.org/} smart pointers but rewritten to
|
||||||
use macros instead.
|
use macros instead.
|
||||||
|
|
||||||
|
A smart pointer holds a pointer to an object. The memory used by the object is
|
||||||
|
deleted when the smart pointer goes out of scope. This class is different from
|
||||||
|
the \texttt{std::auto\_ptr<>} in so far as it doesn't provide copy constructor
|
||||||
|
nor assignment operator. This limits what you can do with it but is much less
|
||||||
|
surprizing than the ``destructive copy'' behaviour of the standard class.
|
||||||
|
|
||||||
\wxheading{Example}
|
\wxheading{Example}
|
||||||
|
|
||||||
Below is an example of using a wxWindows scoped smart pointer and
|
Below is an example of using a wxWindows scoped smart pointer and
|
||||||
@@ -41,19 +47,33 @@ pointer array.
|
|||||||
|
|
||||||
\wxheading{Declaring new smart pointer types}
|
\wxheading{Declaring new smart pointer types}
|
||||||
|
|
||||||
|
To declare the smart pointer class \texttt{CLASSNAME} containing pointes to a
|
||||||
|
(possibly incomplete) type \texttt{TYPE} you should use
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
wxDECLAR_SCOPED_PTR( TYPE, // type of the values
|
wxDECLARE_SCOPED_PTR( TYPE, // type of the values
|
||||||
CLASSNAME ); // name of the class
|
CLASSNAME ); // name of the class
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
A smart pointer holds a pointer to an object (which must be complete
|
And later, when \texttt{TYPE} is fully defined, you must also use
|
||||||
when wxDEFINE\_SCOPED\_PTR() is called). The memory used by the object is
|
\begin{verbatim}
|
||||||
deleted when the smart pointer goes out of scope. The first argument
|
wxDEFINE_SCOPED_PTR( TYPE, CLASSNAME );
|
||||||
of the macro is the pointer type, the second is the name of the new
|
\end{verbatim}
|
||||||
smart pointer class being created. Below we will use wxScopedPtr to
|
to implement the scoped pointer class.
|
||||||
|
|
||||||
|
The first argument of these macro is the pointer type, the second is the name
|
||||||
|
of the new smart pointer class being created. Below we will use wxScopedPtr to
|
||||||
represent the scoped pointer class, but the user may create the class with any
|
represent the scoped pointer class, but the user may create the class with any
|
||||||
legal name.
|
legal name.
|
||||||
|
|
||||||
|
Alternatively, if you don't have to separate the point of declaration and
|
||||||
|
definition of this class and if you accept the standard naming convention, that
|
||||||
|
is that the scoped pointer for the class \texttt{Foo} is called
|
||||||
|
\texttt{FooPtr}, you can use a single macro which replaces two macros above:
|
||||||
|
\begin{verbatim}
|
||||||
|
wxDEFINE_SCOPED_PTR_TYPE( TYPE );
|
||||||
|
\end{verbatim}
|
||||||
|
Once again, in this cass \texttt{CLASSNAME} will be \texttt{TYPEPtr}.
|
||||||
|
|
||||||
\wxheading{Include files}
|
\wxheading{Include files}
|
||||||
|
|
||||||
<wx/ptr\_scpd.h>
|
<wx/ptr\_scpd.h>
|
||||||
|
@@ -126,6 +126,14 @@ name::~name() \
|
|||||||
wxCHECKED_DELETE(m_ptr); \
|
wxCHECKED_DELETE(m_ptr); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this macro can be used for the most common case when you want to declare and
|
||||||
|
// define the scoped pointer at the same time and want to use the standard
|
||||||
|
// naming convention: auto pointer to Foo is called FooPtr
|
||||||
|
#define wxDEFINE_SCOPED_PTR_TYPE(T) \
|
||||||
|
wxDECLARE_SCOPED_PTR(T, T ## Ptr); \
|
||||||
|
wxDEFINE_SCOPED_PTR(T, T ## Ptr)
|
||||||
|
|
||||||
|
// the same but for arrays instead of simple pointers
|
||||||
#define wxDECLARE_SCOPED_ARRAY(T, name)\
|
#define wxDECLARE_SCOPED_ARRAY(T, name)\
|
||||||
class name \
|
class name \
|
||||||
{ \
|
{ \
|
||||||
@@ -174,4 +182,5 @@ void name::reset(T * p){ \
|
|||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // __WX_SCOPED_POINTER__
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user