git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29316 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			203 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
\section{\class{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.
 | 
						|
 | 
						|
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}
 | 
						|
 | 
						|
Below is an example of using a wxWidgets 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}
 | 
						|
 | 
						|
To declare the smart pointer class \texttt{CLASSNAME} containing pointes to a
 | 
						|
(possibly incomplete) type \texttt{TYPE} you should use
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
    wxDECLARE_SCOPED_PTR( TYPE,     // type of the values
 | 
						|
                                CLASSNAME ); // name of the class
 | 
						|
\end{verbatim}
 | 
						|
 | 
						|
And later, when \texttt{TYPE} is fully defined, you must also use
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
    wxDEFINE_SCOPED_PTR( TYPE, CLASSNAME );
 | 
						|
\end{verbatim}
 | 
						|
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
 | 
						|
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}
 | 
						|
 | 
						|
<wx/ptr\_scpd.h>
 | 
						|
 | 
						|
\wxheading{See also}
 | 
						|
 | 
						|
\helpref{wxScopedArray}{wxscopedarray}\rtfsp
 | 
						|
 | 
						|
\latexignore{\rtfignore{\wxheading{Members}}}
 | 
						|
 | 
						|
\membersection{wxScopedPtr::wxScopedPtr}\label{wxscopedptrctor}
 | 
						|
 | 
						|
\func{}{explicit wxScopedPtr}{\param{type}{ * T = NULL}}
 | 
						|
 | 
						|
Creates the smart pointer with the given pointer or none if {\tt NULL}.  On
 | 
						|
compilers that support it, this uses the explicit keyword.
 | 
						|
 | 
						|
 | 
						|
\membersection{wxScopedPtr::\destruct{wxScopedPtr}}\label{wxscopedptrdtor}
 | 
						|
 | 
						|
\func{}{\destruct{wxScopedPtr}}{\void}
 | 
						|
 | 
						|
Destructor frees the pointer help by this object if it is not {\tt NULL}.
 | 
						|
 | 
						|
 | 
						|
\membersection{wxScopedPtr::release}\label{wxscopedptrrelease}
 | 
						|
 | 
						|
\func{T *}{release}{\void}
 | 
						|
 | 
						|
Returns the currently hold pointer and resets the smart pointer object to 
 | 
						|
{\tt NULL}. After a call to this function the caller is responsible for
 | 
						|
deleting the pointer.
 | 
						|
 | 
						|
 | 
						|
\membersection{wxScopedPtr::reset}\label{wxscopedptrreset}
 | 
						|
 | 
						|
\func{\void}{reset}{\param{T}{ p * = NULL}}
 | 
						|
 | 
						|
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
 | 
						|
pointer you are assigning is not the same pointer that is already stored.
 | 
						|
 | 
						|
 | 
						|
\membersection{wxScopedPtr::operator *}\label{wxscopedptrptr}
 | 
						|
 | 
						|
\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 -$>$}\label{wxscopedptrref}
 | 
						|
 | 
						|
\func{const T*}{operator -$>$}{\void} % TODO
 | 
						|
 | 
						|
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}\label{wxscopedptrget}
 | 
						|
 | 
						|
\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}\label{wxscopedptrswap}
 | 
						|
 | 
						|
\func{\void}{swap}{\param{wxScopedPtr}{ \& other}}
 | 
						|
 | 
						|
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).
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
%%%%%%% 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}!
 | 
						|
 | 
						|
 |