mirror of
https://github.com/boostorg/utility.git
synced 2025-05-08 18:34:02 +00:00
123 lines
4.3 KiB
HTML
123 lines
4.3 KiB
HTML
<!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 <20> 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>
|