| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
| <html> |
| <head> |
| <title>Boost: checked_delete.hpp documentation</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> |
| </head> |
| <body bgcolor="white" style="MARGIN-LEFT: 5%; MARGIN-RIGHT: 5%"> |
| <table border="0" width="100%"> |
| <tr> |
| <td width="277"><A href="../../index.htm"> <img src="../../boost.png" alt="boost.png (6897 bytes)" width="277" height="86" border="0"></A> |
| </td> |
| <td align="center"> |
| <h1>checked_delete.hpp</h1> |
| </td> |
| </tr> |
| <tr> |
| <td colspan="2" height="64"> </td> |
| </tr> |
| </table> |
| <p> |
| The header <STRONG><boost/checked_delete.hpp></STRONG> defines two |
| function templates, <STRONG>checked_delete</STRONG> and <STRONG>checked_array_delete</STRONG>, |
| and two class templates, <STRONG>checked_deleter</STRONG> and <STRONG>checked_array_deleter</STRONG>. |
| </p> |
| <P>The C++ Standard allows, in 5.3.5/5, pointers to incomplete class types to be |
| deleted with a <EM>delete-expression</EM>. When the class has a non-trivial |
| destructor, or a class-specific operator delete, the behavior is undefined. |
| Some compilers issue a warning when an incomplete type is deleted, but |
| unfortunately, not all do, and programmers sometimes ignore or disable |
| warnings.</P> |
| <P>A particularly troublesome case is when a smart pointer's destructor, such as <STRONG> |
| boost::scoped_ptr<T>::~scoped_ptr</STRONG>, is instantiated with an |
| incomplete type. This can often lead to silent, hard to track failures.</P> |
| <P>The supplied function and class templates can be used to prevent these problems, |
| as they require a complete type, and cause a compilation error otherwise.</P> |
| <h3><a name="Synopsis">Synopsis</a></h3> |
| <pre> |
| namespace boost |
| { |
| |
| template<class T> void checked_delete(T * p); |
| template<class T> void checked_array_delete(T * p); |
| template<class T> struct checked_deleter; |
| template<class T> struct checked_array_deleter; |
| |
| } |
| </pre> |
| <h3>checked_delete</h3> |
| <h4><a name="checked_delete">template<class T> void checked_delete(T * p);</a></h4> |
| <blockquote> |
| <p> |
| <b>Requires:</b> <b>T</b> must be a complete type. The expression <tt>delete p</tt> |
| must be well-formed. |
| </p> |
| <p> |
| <b>Effects:</b> <tt>delete p;</tt> |
| </p> |
| </blockquote> |
| <h3>checked_array_delete</h3> |
| <h4><a name="checked_array_delete">template<class T> void checked_array_delete(T |
| * p);</a></h4> |
| <blockquote> |
| <p> |
| <b>Requires:</b> <b>T</b> must be a complete type. The expression <tt>delete [] p</tt> |
| must be well-formed. |
| </p> |
| <p> |
| <b>Effects:</b> <tt>delete [] p;</tt> |
| </p> |
| </blockquote> |
| <h3>checked_deleter</h3> |
| <pre> |
| template<class T> struct checked_deleter |
| { |
| typedef void result_type; |
| typedef T * argument_type; |
| void operator()(T * p) const; |
| }; |
| </pre> |
| <h4>void checked_deleter<T>::operator()(T * p) const;</h4> |
| <blockquote> |
| <p> |
| <b>Requires:</b> <b>T</b> must be a complete type. The expression <tt>delete p</tt> |
| must be well-formed. |
| </p> |
| <p> |
| <b>Effects:</b> <tt>delete p;</tt> |
| </p> |
| </blockquote> |
| <h3>checked_array_deleter</h3> |
| <pre> |
| template<class T> struct checked_array_deleter |
| { |
| typedef void result_type; |
| typedef T * argument_type; |
| void operator()(T * p) const; |
| }; |
| </pre> |
| <h4>void checked_array_deleter<T>::operator()(T * p) const;</h4> |
| <blockquote> |
| <p> |
| <b>Requires:</b> <b>T</b> must be a complete type. The expression <tt>delete [] p</tt> |
| must be well-formed. |
| </p> |
| <p> |
| <b>Effects:</b> <tt>delete [] p;</tt> |
| </p> |
| </blockquote> |
| <h3><a name="Acknowledgements">Acknowledgements</a></h3> |
| <p> |
| The function templates <STRONG>checked_delete</STRONG> and <STRONG>checked_array_delete</STRONG> |
| were originally part of <STRONG><boost/utility.hpp></STRONG>, and the |
| documentation acknowledged Beman Dawes, Dave Abrahams, Vladimir Prus, Rainer |
| Deyke, John Maddock, and others as contributors. |
| </p> |
| <p> |
| <br> |
| <small>Copyright © 2002 by Peter Dimov. Distributed under the Boost Software License, Version |
| 1.0. See accompanying file <A href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</A> or |
| copy at <A href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>.</small></p> |
| </body> |
| </html> |