Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/utility/checked_delete.html @ 14

Last change on this file since 14 was 12, checked in by landauf, 17 years ago

added boost

File size: 4.3 KB
RevLine 
[12]1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2<html>
3        <head>
4                <title>Boost: checked_delete.hpp documentation</title>
5                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6        </head>
7        <body bgcolor="white" style="MARGIN-LEFT: 5%; MARGIN-RIGHT: 5%">
8                <table border="0" width="100%">
9                        <tr>
10                                <td width="277">
11                                        <img src="../../boost.png" alt="boost.png (6897 bytes)" width="277" height="86">
12                                </td>
13                                <td align="middle">
14                                        <h1>checked_delete.hpp</h1>
15                                </td>
16                        </tr>
17                        <tr>
18                                <td colspan="2" height="64">&nbsp;</td>
19                        </tr>
20                </table>
21                <p>
22                        The header <STRONG>&lt;boost/checked_delete.hpp&gt;</STRONG> defines two
23                        function templates, <STRONG>checked_delete</STRONG> and <STRONG>checked_array_delete</STRONG>,
24                        and two class templates, <STRONG>checked_deleter</STRONG> and <STRONG>checked_array_deleter</STRONG>.
25                </p>
26                <P>The C++ Standard allows, in 5.3.5/5, pointers to incomplete class types to be
27                        deleted with a <EM>delete-expression</EM>. When the class has a non-trivial
28                        destructor, or a class-specific operator delete, the behavior is undefined.
29                        Some compilers issue a warning when an incomplete type is deleted, but
30                        unfortunately, not all do, and programmers sometimes ignore or disable
31                        warnings.</P>
32                <P>A particularly troublesome case is when a smart pointer's destructor, such as <STRONG>
33                                boost::scoped_ptr&lt;T&gt;::~scoped_ptr</STRONG>, is instantiated with an
34                        incomplete type. This can often lead to silent, hard to track failures.</P>
35                <P>The supplied function and class templates can be used to prevent these problems,
36                        as they require a complete type, and cause a compilation error otherwise.</P>
37                <h3><a name="Synopsis">Synopsis</a></h3>
38                <pre>
39namespace boost
40{
41
42template&lt;class T&gt; void checked_delete(T * p);
43template&lt;class T&gt; void checked_array_delete(T * p);
44template&lt;class T&gt; struct checked_deleter;
45template&lt;class T&gt; struct checked_array_deleter;
46
47}
48</pre>
49                <h3>checked_delete</h3>
50                <h4><a name="checked_delete">template&lt;class T&gt; void checked_delete(T * p);</a></h4>
51                <blockquote>
52                        <p>
53                                <b>Requires:</b> <b>T</b> must be a complete type. The expression <tt>delete p</tt>
54                                must be well-formed.
55                        </p>
56                        <p>
57                                <b>Effects:</b> <tt>delete p;</tt>
58                        </p>
59                </blockquote>
60                <h3>checked_array_delete</h3>
61                <h4><a name="checked_array_delete">template&lt;class T&gt; void checked_array_delete(T
62                                * p);</a></h4>
63                <blockquote>
64                        <p>
65                                <b>Requires:</b> <b>T</b> must be a complete type. The expression <tt>delete [] p</tt>
66                                must be well-formed.
67                        </p>
68                        <p>
69                                <b>Effects:</b> <tt>delete [] p;</tt>
70                        </p>
71                </blockquote>
72                <h3>checked_deleter</h3>
73                <pre>
74template&lt;class T&gt; struct checked_deleter
75{
76    typedef void result_type;
77    typedef T * argument_type;
78    void operator()(T * p) const;
79};
80</pre>
81                <h4>void checked_deleter&lt;T&gt;::operator()(T * p) const;</h4>
82                <blockquote>
83                        <p>
84                                <b>Requires:</b> <b>T</b> must be a complete type. The expression <tt>delete p</tt>
85                                must be well-formed.
86                        </p>
87                        <p>
88                                <b>Effects:</b> <tt>delete p;</tt>
89                        </p>
90                </blockquote>
91                <h3>checked_array_deleter</h3>
92                <pre>
93template&lt;class T&gt; struct checked_array_deleter
94{
95    typedef void result_type;
96    typedef T * argument_type;
97    void operator()(T * p) const;
98};
99</pre>
100                <h4>void checked_array_deleter&lt;T&gt;::operator()(T * p) const;</h4>
101                <blockquote>
102                        <p>
103                                <b>Requires:</b> <b>T</b> must be a complete type. The expression <tt>delete [] p</tt>
104                                must be well-formed.
105                        </p>
106                        <p>
107                                <b>Effects:</b> <tt>delete [] p;</tt>
108                        </p>
109                </blockquote>
110                <h3><a name="Acknowledgements">Acknowledgements</a></h3>
111                <p>
112                        The function templates <STRONG>checked_delete</STRONG> and <STRONG>checked_array_delete</STRONG>
113                        were originally part of <STRONG>&lt;boost/utility.hpp&gt;</STRONG>, and the
114                        documentation acknowledged Beman Dawes, Dave Abrahams, Vladimir Prus, Rainer
115                        Deyke, John Maddock, and others as contributors.
116                </p>
117                <p>
118                        <br>
119                        <small>Copyright © 2002 by Peter Dimov. Permission to copy, use, modify, sell and
120                                distribute this document is granted provided this copyright notice appears in
121                                all copies. This document is provided "as is" without express or implied
122                                warranty, and with no claim as to its suitability for any purpose.</small></p>
123        </body>
124</html>
Note: See TracBrowser for help on using the repository browser.