111 lines
3.2 KiB
TeX
111 lines
3.2 KiB
TeX
|
\section{wxScopedPtr}\label{wxscopedptr}
|
||
|
|
||
|
This is a simple scoped smart pointer implementation that is similar to
|
||
|
the \urlref{Boost}{http://www.boost.org} smart pointers but rewritten to
|
||
|
use macros instead.
|
||
|
|
||
|
\wxheading{Example}
|
||
|
|
||
|
Below is an example of using a wxWindows scoped smart pointer and
|
||
|
pointer array.
|
||
|
|
||
|
\begin{verbatim}
|
||
|
class MyClass { /* ... */ };
|
||
|
|
||
|
// declare a smart pointer to a MyClass called wxMyClassPtr
|
||
|
wxDECLARE_SCOPED_PTR(MyClass, wxMyClassPtr)
|
||
|
// declare a smart pointer to an array of chars
|
||
|
wxDECLARE_SCOPED_ARRAY(char, wxCharArray)
|
||
|
|
||
|
...
|
||
|
|
||
|
// define the first pointer class, must be complete
|
||
|
wxDEFINE_SCOPED_PTR(MyClass, wxMyClassPtr)
|
||
|
// define the second pointer class
|
||
|
wxDEFINE_SCOPED_ARRAY(char, wxCharArray)
|
||
|
|
||
|
// create an object with a new pointer to MyClass
|
||
|
wxMyClassPtr theObj(new MyClass());
|
||
|
// reset the pointer (deletes the previous one)
|
||
|
theObj.reset(new MyClass());
|
||
|
|
||
|
// access the pointer
|
||
|
theObj->MyFunc();
|
||
|
|
||
|
// create an object with a new array of chars
|
||
|
wxCharArray theCharObj(new char[100]);
|
||
|
|
||
|
// access the array
|
||
|
theCharObj[0] = "!";
|
||
|
\end{verbatim}
|
||
|
|
||
|
\wxheading{Declaring new smart pointer types}
|
||
|
|
||
|
\begin{verbatim}
|
||
|
wxDECLAR_SCOPED_PTR( TYPE, // type of the values
|
||
|
CLASSNAME ); // name of the class
|
||
|
\end{verbatim}
|
||
|
|
||
|
A smart pointer holds a pointer to an object (which must be complete
|
||
|
when wxDEFINE_SCOPED_PTR() is called). The memory used by the object is
|
||
|
deleted when the smart pointer goes out of scope. The first argument
|
||
|
of the 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
|
||
|
legal name.
|
||
|
|
||
|
\wxheading{Include files}
|
||
|
|
||
|
<wx/ptr\_scpd.h>
|
||
|
|
||
|
\wxheading{See also}
|
||
|
|
||
|
\helpref{wxScopedArray}{wxscopedarray}\rtfsp
|
||
|
|
||
|
\latexignore{\rtfignore{\wxheading{Members}}}
|
||
|
|
||
|
\membersection{wxScopedPtr::wxScopedPtr}
|
||
|
|
||
|
\func{}{wxScopedPtr}{\param{type}{ * T = NULL}}
|
||
|
|
||
|
Creates the smart pointer with the given pointer or none if NULL. On
|
||
|
compilers that support it, this uses the explicit keyword.
|
||
|
|
||
|
\membersection{wxScopedPtr::reset}
|
||
|
|
||
|
\func{\void}{reset}{\param{T}{ p * = NULL}}
|
||
|
|
||
|
Deletes the currently held pointer and sets it to 'p' or to NULL if no
|
||
|
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.
|
||
|
|
||
|
\membersection{wxScopedPtr::operator *}
|
||
|
|
||
|
\func{const T\&}{operator *}{\void}
|
||
|
|
||
|
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
|
||
|
crash.
|
||
|
|
||
|
\membersection{wxScopedPtr::operator -\>}
|
||
|
|
||
|
\func{const T*}{operator -\>}{\void}
|
||
|
|
||
|
This operator works like the standard C++ pointer operator to return the pointer
|
||
|
in the smart pointer or NULL if it is empty.
|
||
|
|
||
|
\membersection{wxScopedPtr::get}
|
||
|
|
||
|
\func{const T*}{get}{\void}
|
||
|
|
||
|
This operator gets the pointer stored in the smart pointer or returns NULL if
|
||
|
there is none.
|
||
|
|
||
|
\membersection{wxScopedPtr::swap}
|
||
|
|
||
|
\func{\void}{swap}{\param{wxScopedPtr}{ \& ot}}
|
||
|
|
||
|
Swap the pointer inside the smart pointer with 'ot'. The pointer being swapped
|
||
|
must be of the same type (hence the same class name).
|
||
|
|