<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://assela.pathirana.net/index.php?action=history&amp;feed=atom&amp;title=Template%3ACpptutorial_Exceptions</id>
	<title>Template:Cpptutorial Exceptions - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://assela.pathirana.net/index.php?action=history&amp;feed=atom&amp;title=Template%3ACpptutorial_Exceptions"/>
	<link rel="alternate" type="text/html" href="https://assela.pathirana.net/index.php?title=Template:Cpptutorial_Exceptions&amp;action=history"/>
	<updated>2026-05-15T08:47:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://assela.pathirana.net/index.php?title=Template:Cpptutorial_Exceptions&amp;diff=3600&amp;oldid=prev</id>
		<title>Root: 1 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://assela.pathirana.net/index.php?title=Template:Cpptutorial_Exceptions&amp;diff=3600&amp;oldid=prev"/>
		<updated>2007-06-08T15:04:46Z</updated>

		<summary type="html">&lt;p&gt;1 revision(s)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:04, 8 June 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://assela.pathirana.net/index.php?title=Template:Cpptutorial_Exceptions&amp;diff=3599&amp;oldid=prev</id>
		<title>Root at 09:46, 3 April 2007</title>
		<link rel="alternate" type="text/html" href="https://assela.pathirana.net/index.php?title=Template:Cpptutorial_Exceptions&amp;diff=3599&amp;oldid=prev"/>
		<updated>2007-04-03T09:46:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Exceptions=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exceptions provide a way to react to exceptional circumstances (like runtime errors) in our program by transferring control to special functions called &amp;#039;&amp;#039;handlers&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
To catch exceptions we must place a portion of code under exception inspection. This is done by enclosing that portion of code in a &amp;#039;&amp;#039;try block&amp;#039;&amp;#039;. When an exceptional circumstance arises within that block, an exception is thrown that transfers the control to the exception handler. If no exception is thrown, the code continues normally and all handlers are ignored.&lt;br /&gt;
&lt;br /&gt;
A exception is thrown by using the throw keyword from inside the try block. Exception handlers are declared with the keyword catch, which must be placed immediately after the try block:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;codebox&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;comm&amp;quot;&amp;gt;// exceptions&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;prep&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include &amp;lt;iostream&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;using&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;namespace&amp;lt;/span&amp;gt; std;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; main () {&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;try&amp;lt;/span&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
     &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;throw&amp;lt;/span&amp;gt; 20;&lt;br /&gt;
   }&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; e)&lt;br /&gt;
   {&lt;br /&gt;
     cout &amp;lt;&amp;lt; &amp;lt;span class=&amp;quot;str&amp;quot;&amp;gt;&amp;quot;An exception occurred. Exception Nr. &amp;quot;&amp;lt;/span&amp;gt; &amp;lt;&amp;lt; e &amp;lt;&amp;lt; endl;&lt;br /&gt;
   }&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
| class=&amp;quot;result&amp;quot; |&lt;br /&gt;
 An exception occurred. Exception Nr. 20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The code under exception handling is enclosed in a &amp;lt;tt&amp;gt;try&amp;lt;/tt&amp;gt; block. In this example this code simply throws an exception:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;snippet&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;throw&amp;lt;/span&amp;gt; 20;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A throw expression accepts one parameter (in this case the integer value &amp;lt;tt&amp;gt;20&amp;lt;/tt&amp;gt;), which is passed as an argument to the exception handler.&lt;br /&gt;
&lt;br /&gt;
The exception handler is declared with the &amp;lt;tt&amp;gt;catch&amp;lt;/tt&amp;gt; keyword. As you can see, it follows immediately the closing brace of the &amp;lt;tt&amp;gt;try&amp;lt;/tt&amp;gt; block. The catch format is similar to a regular function that always has at least one parameter. The type of this parameter is very important, since the type of the argument passed by the throw expression is checked against it, and only in the case they match, the exception is catch.&lt;br /&gt;
&lt;br /&gt;
We can chain multiple handlers (catch expressions), each one with a different parameter type. Only the handler that matches its type with the argument specified in the throw statement is executed.&lt;br /&gt;
&lt;br /&gt;
If we use an ellipsis (&amp;lt;tt&amp;gt;...&amp;lt;/tt&amp;gt;) as the parameter of &amp;lt;tt&amp;gt;catch&amp;lt;/tt&amp;gt;, that handler will catch any exception no matter what the type of the &amp;lt;tt&amp;gt;throw&amp;lt;/tt&amp;gt; exception is. This can be used as a default handler that catches all exceptions not caught by other handlers if it is specified at last:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;snippet&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;try&amp;lt;/span&amp;gt; {&lt;br /&gt;
   &amp;lt;span class=&amp;quot;comm&amp;quot;&amp;gt;// code here&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; param) { cout &amp;lt;&amp;lt; &amp;lt;span class=&amp;quot;str&amp;quot;&amp;gt;&amp;quot;int exception&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;; }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;char&amp;lt;/span&amp;gt; param) { cout &amp;lt;&amp;lt; &amp;lt;span class=&amp;quot;str&amp;quot;&amp;gt;&amp;quot;char exception&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;; }&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (...) { cout &amp;lt;&amp;lt; &amp;lt;span class=&amp;quot;str&amp;quot;&amp;gt;&amp;quot;default exception&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;; }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In this case the last handler would catch any exception thrown with any parameter that is neither an &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt; nor a &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After an exception has been handled the program execution resumes after the &amp;lt;tt&amp;gt;try-catch&amp;lt;/tt&amp;gt; block, not after the &amp;lt;tt&amp;gt;throw&amp;lt;/tt&amp;gt; statement!.&lt;br /&gt;
&lt;br /&gt;
It is also possible to nest &amp;lt;tt&amp;gt;try-catch&amp;lt;/tt&amp;gt; blocks within more external &amp;lt;tt&amp;gt;try&amp;lt;/tt&amp;gt; blocks. In these cases, we have the possibility that an internal &amp;lt;tt&amp;gt;catch&amp;lt;/tt&amp;gt; block forwards the exception to its external level. This is done with the expression &amp;lt;tt&amp;gt;throw;&amp;lt;/tt&amp;gt; with no arguments. For example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;snippet&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;try&amp;lt;/span&amp;gt; {&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;try&amp;lt;/span&amp;gt; {&lt;br /&gt;
       &amp;lt;span class=&amp;quot;comm&amp;quot;&amp;gt;// code here&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   }&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; n) {&lt;br /&gt;
       &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;throw&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (...) {&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;lt;span class=&amp;quot;str&amp;quot;&amp;gt;&amp;quot;Exception occurred&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;;&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Exception specifications===&lt;br /&gt;
&lt;br /&gt;
When declaring a function we can limit the exception type it might directly or indirectly throw by appending a &amp;lt;tt&amp;gt;throw&amp;lt;/tt&amp;gt; suffix to the function declaration:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;snippet&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt; myfunction (&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;char&amp;lt;/span&amp;gt; param) &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;throw&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt;);&lt;br /&gt;
 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This declares a function called &amp;lt;tt&amp;gt;myfunction&amp;lt;/tt&amp;gt; which takes one agument of type &amp;lt;tt&amp;gt;char&amp;lt;/tt&amp;gt; and returns an element of type &amp;lt;tt&amp;gt;float&amp;lt;/tt&amp;gt;. The only exception that this function might throw is an exception of type &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;. If it throws an exception with a different type, either directly or indirectly, it cannot be caught by a regular &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;-type handler.&lt;br /&gt;
&lt;br /&gt;
If this &amp;lt;tt&amp;gt;throw&amp;lt;/tt&amp;gt; specifier is left empty with no type, this means the function is not allowed to throw exceptions. Functions with no &amp;lt;tt&amp;gt;throw&amp;lt;/tt&amp;gt; specifier (regular functions) are allowed to throw exceptions with any type:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;snippet&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; myfunction (&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; param) &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;throw&amp;lt;/span&amp;gt;(); &amp;lt;span class=&amp;quot;comm&amp;quot;&amp;gt;// no exceptions allowed&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; myfunction (&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; param);         &amp;lt;span class=&amp;quot;comm&amp;quot;&amp;gt;// all exceptions allowed&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Standard exceptions===&lt;br /&gt;
&lt;br /&gt;
The C++ Standard library provides a base class specifically designed to declare objects to be thrown as exceptions. It is called &amp;lt;tt&amp;gt;exception&amp;lt;/tt&amp;gt; and is defined in the &amp;lt;tt&amp;gt;&amp;lt;exception&amp;gt;&amp;lt;/tt&amp;gt; header file under the &amp;lt;tt&amp;gt;namespace std&amp;lt;/tt&amp;gt;. This class has the usual default and copy constructors, operators and destructors, plus an additional virtual member function called &amp;lt;tt&amp;gt;what&amp;lt;/tt&amp;gt; that returns a null-terminated character sequence (&amp;lt;tt&amp;gt;char *&amp;lt;/tt&amp;gt;) and that can be overwritten in derived classes to contain some sort of description of the exception.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;codebox&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;comm&amp;quot;&amp;gt;// standard exceptions&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span class=&amp;quot;prep&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include &amp;lt;iostream&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;prep&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include &amp;lt;exception&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;using&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;namespace&amp;lt;/span&amp;gt; std;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;class&amp;lt;/span&amp;gt; myexception: &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;public&amp;lt;/span&amp;gt; exception&lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;virtual&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;const&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;char&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;* what() &amp;lt;/nowiki&amp;gt;&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;const&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;throw&amp;lt;/span&amp;gt;()&lt;br /&gt;
   {&lt;br /&gt;
     &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;str&amp;quot;&amp;gt;&amp;quot;My exception happened&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;;&lt;br /&gt;
   }&lt;br /&gt;
 } myex;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; main () {&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;try&amp;lt;/span&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
     &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;throw&amp;lt;/span&amp;gt; myex;&lt;br /&gt;
   }&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (exception&amp;amp; e)&lt;br /&gt;
   {&lt;br /&gt;
     cout &amp;lt;&amp;lt; e.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
   }&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
| class=&amp;quot;result&amp;quot; |&lt;br /&gt;
 My exception happened.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We have placed a handler that catches exception objects by reference (notice the ampersand &amp;lt;tt&amp;gt;&amp;amp;&amp;lt;/tt&amp;gt; after the type), therefore this catches also classes derived from &amp;lt;tt&amp;gt;exception&amp;lt;/tt&amp;gt;, like our &amp;lt;tt&amp;gt;myex&amp;lt;/tt&amp;gt; object of class &amp;lt;tt&amp;gt;myexception&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All exceptions thrown by components of the C++ Standard library throw exceptions derived from this &amp;lt;tt&amp;gt;std::exception&amp;lt;/tt&amp;gt; class. These are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;boxed&amp;quot;&lt;br /&gt;
! exception&lt;br /&gt;
! description&lt;br /&gt;
|-&lt;br /&gt;
| bad_alloc&lt;br /&gt;
| thrown by new on allocation failure&lt;br /&gt;
|-&lt;br /&gt;
| bad_cast&lt;br /&gt;
| thrown by dynamic_cast when fails with a referenced type&lt;br /&gt;
|-&lt;br /&gt;
| bad_exception&lt;br /&gt;
| thrown when an exception type doesn&amp;#039;t match any catch&lt;br /&gt;
|-&lt;br /&gt;
| bad_typeid&lt;br /&gt;
| thrown by typeid&lt;br /&gt;
|-&lt;br /&gt;
| ios_base::failure&lt;br /&gt;
| thrown by functions in the iostream library&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For example, if we use the operator &amp;lt;tt&amp;gt;new&amp;lt;/tt&amp;gt; without &amp;lt;tt&amp;gt;(nothrow)&amp;lt;/tt&amp;gt; and the memory cannot be allocated, an exception of type &amp;lt;tt&amp;gt;bad_alloc&amp;lt;/tt&amp;gt; is thrown:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;snippet&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;try&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 {&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; * myarray= &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt;[1000];&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (bad_alloc&amp;amp;)&lt;br /&gt;
 {&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;lt;span class=&amp;quot;str&amp;quot;&amp;gt;&amp;quot;Error allocating memory.&amp;quot;&amp;lt;/span&amp;gt; &amp;lt;&amp;lt; endl;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It is recommended to include all dynamic memory allocations within a try block that catches this type of exception to perform a clean action instead of an abnormal program termination, which is what happens when this type of exception is thrown and not caught. If you want to force a &amp;lt;tt&amp;gt;bad_alloc&amp;lt;/tt&amp;gt; exception to see it in action, you can try to allocate a huge array; On my system, trying to allocate 1 billion &amp;lt;tt&amp;gt;int&amp;lt;/tt&amp;gt;s threw a &amp;lt;tt&amp;gt;bad_alloc&amp;lt;/tt&amp;gt; exception.&lt;br /&gt;
&lt;br /&gt;
Because &amp;lt;tt&amp;gt;bad_alloc&amp;lt;/tt&amp;gt; is derived from the standard base class &amp;lt;tt&amp;gt;exception&amp;lt;/tt&amp;gt;, we can handle that same exception by catching references to the &amp;lt;tt&amp;gt;exception&amp;lt;/tt&amp;gt; class:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;codebox&amp;quot;&lt;br /&gt;
| class=&amp;quot;code&amp;quot; |&lt;br /&gt;
 &amp;lt;span class=&amp;quot;comm&amp;quot;&amp;gt;// bad_alloc standard exception&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span class=&amp;quot;prep&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include &amp;lt;iostream&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;prep&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#include &amp;lt;exception&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;using&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;namespace&amp;lt;/span&amp;gt; std;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt; main () {&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;try&amp;lt;/span&amp;gt;&lt;br /&gt;
   {&lt;br /&gt;
     &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt;&amp;lt;nowiki&amp;gt;* myarray= &amp;lt;/nowiki&amp;gt;&amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;new&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;int&amp;lt;/span&amp;gt;[1000];&lt;br /&gt;
   }&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;catch&amp;lt;/span&amp;gt; (exception&amp;amp; e)&lt;br /&gt;
   {&lt;br /&gt;
     cout &amp;lt;&amp;lt; &amp;lt;span class=&amp;quot;str&amp;quot;&amp;gt;&amp;quot;Standard exception: &amp;quot;&amp;lt;/span&amp;gt; &amp;lt;&amp;lt; e.what() &amp;lt;&amp;lt; endl;&lt;br /&gt;
   }&lt;br /&gt;
   &amp;lt;span class=&amp;quot;kw&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; 0;&lt;br /&gt;
 }&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
</feed>