| <!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> |