1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5. Dynamic Memory</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.0" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Part II. Support" /><link rel="prev" href="bk01pt02ch04s03.html" title="NULL" /><link rel="next" href="termination.html" title="Chapter 6. Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02ch04s03.html">Prev</a> </td><th width="60%" align="center">Part II.
6 </th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.support.memory"></a>Chapter 5. Dynamic Memory</h2></div></div></div><p>
7 There are six flavors each of <code class="function">new</code> and
8 <code class="function">delete</code>, so make certain that you're using the right
9 ones. Here are quickie descriptions of <code class="function">new</code>:
10 </p><div class="itemizedlist"><ul type="disc"><li><p>
11 single object form, throwing a
12 <code class="classname">bad_alloc</code> on errors; this is what most
13 people are used to using
15 Single object "nothrow" form, returning NULL on errors
17 Array <code class="function">new</code>, throwing
18 <code class="classname">bad_alloc</code> on errors
20 Array nothrow <code class="function">new</code>, returning
21 <code class="constant">NULL</code> on errors
23 Placement <code class="function">new</code>, which does nothing (like
26 Placement array <code class="function">new</code>, which also does
28 </p></li></ul></div><p>
29 They are distinguished by the parameters that you pass to them, like
30 any other overloaded function. The six flavors of <code class="function">delete</code>
31 are distinguished the same way, but none of them are allowed to throw
32 an exception under any circumstances anyhow. (They match up for
35 Remember that it is perfectly okay to call <code class="function">delete</code> on a
36 NULL pointer! Nothing happens, by definition. That is not the
37 same thing as deleting a pointer twice.
39 By default, if one of the “<span class="quote">throwing <code class="function">new</code>s</span>” can't
40 allocate the memory requested, it tosses an instance of a
41 <code class="classname">bad_alloc</code> exception (or, technically, some class derived
42 from it). You can change this by writing your own function (called a
43 new-handler) and then registering it with <code class="function">set_new_handler()</code>:
44 </p><pre class="programlisting">
45 typedef void (*PFV)(void);
48 static PFV old_handler;
50 void my_new_handler ()
53 popup_window ("Dude, you are running low on heap memory. You
54 should, like, close some windows, or something.
55 The next time you run out, we're gonna burn!");
56 set_new_handler (old_handler);
62 safety = new char[500000];
63 old_handler = set_new_handler (&my_new_handler);
67 <code class="classname">bad_alloc</code> is derived from the base <code class="classname">exception</code>
68 class defined in Chapter 19.
69 </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch04s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">NULL </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6. Termination</td></tr></table></div></body></html>