Smart pointers are used extensively in aspell to simplify memory management tasks and to avoid memory leaks.
The CopyPtr class makes a deep copy of an object whenever it is
copied. The CopyPtr class is defined in copy_ptr.hpp.
This header should be included wherever CopyPtr is used. The
complete definition of the object CopyPtr is pointing to does
not need to be defined at this point. The implementation is defined
in copy_ptr-t.hpp. The implementation header file should be
included at a point in your code where the class CopyPtr is
pointing to is completely defined.
ClonePtr is like copy pointer except the clone() method
is used instead of the copy constructor to make copies of an object.
If is defined in clone_ptr.hpp and implemented in
clone_ptr-t.hpp.
A StackPtr is designed to be used whenever the only pointer to
a new object allocated with new is on the stack. It is
similar to the standard C++ auto_ptr but the semantics are a
bit different. It is defined in stack_ptr.hpp — unlike
CopyPtr or ClonePtr it is defined and implemented in
this header file.
A generalized version of CopyPtr and ClonePtr which the
two are based on. It is defined in generic_copy_ptr.hpp and
implemented in generic_copy_ptr-t.hpp.