0% found this document useful (0 votes)
15 views21 pages

UNIT 03 - Lecture 29 - Exception Handling

The document discusses exception handling in C++. It covers fundamental concepts like try/catch blocks, stack unwinding, and throwing/catching exceptions. It provides examples of when to use exceptions and best practices like avoiding exceptions as flow control. It also discusses exceptions in contexts like constructors/destructors and inheritance.

Uploaded by

Jelsteen J
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views21 pages

UNIT 03 - Lecture 29 - Exception Handling

The document discusses exception handling in C++. It covers fundamental concepts like try/catch blocks, stack unwinding, and throwing/catching exceptions. It provides examples of when to use exceptions and best practices like avoiding exceptions as flow control. It also discusses exceptions in contexts like constructors/destructors and inheritance.

Uploaded by

Jelsteen J
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 21

1

Course: Object Oriented Programming using C++ (22CAU04A)


 Programme (s) : BCA

 Class : I B.C.A ‘A’

 Semester : II

 Unit & Lecture : 3 & 29

 Facilitator : Prof. J. JELSTEEN


Topic to be Discussed

Exception Handling
Fundamental Philosophy
• Termination model of exception handling
• try block expires when an exception occurs
• Local variables in try block go out of scope
• Code within the matching catch handler executes
• Control resumes with the first statement after the last catch
handler following the try block
• Stack unwinding
• Occurs if no matching catch handler is found
• Program attempts to locate another enclosing try block in the
calling function
Stack Unwinding
• Occurs when a thrown exception is not caught
in a particular scope
• Unwinding a Function terminates that function
• All local variables of the function are destroyed
• Invokes destructors
• Control returns to point where function was invoked
• Attempts are made to catch the exception in
outer try…catch blocks
• If the exception is never caught, the function
terminate is called
Observations
With exception handling, a program can continue executing
(rather than terminating) after dealing with a problem.

This helps to support robust applications that contribute to


mission-critical computing or business-critical computing

When no exceptions occur, there is no performance penalty


Throwing an Exception
• Use keyword throw followed by an operand representing the type
of exception
• The throw operand can be of any type
• If the throw operand is an object, it is called an exception
object
• The throw operand initializes the exception parameter in the
matching catch handler, if one is found
Notes
• Catching an exception object by reference eliminates the
overhead of copying the object that represents the thrown
exception

• Associating each type of runtime error with an appropriately


named exception object improves program clarity.
When to Use Exception Handling

• To process synchronous errors


• Occur when a statement executes
• Not to process asynchronous errors
• Occur in parallel with, and independent of, program
execution
• To process problems arising in predefined software elements
• Such as predefined functions and classes
• Error handling can be performed by the program code to
be customized based on the application’s needs
Software Engineering Notes

• Incorporate exception-handling strategy into


system design from the start
• Very difficult to retrofit after the system has been
implemented!
• Exception handling provides uniform technique
for processing problems
• Helps with understandability of each other’s error handling
code
• Avoid using exception handling as an alternate
form of flow of control
• These “additional” exceptions can “get in the way” of genuine
error handling
Rethrowing an Exception

• Empty throw; statement

• Use when a catch handler cannot or can only partially process


an exception

• Next enclosing try block attempts to match the exception with one
of its catch handlers
Common Programming Error

Executing an empty throw statement outside a


catch handler causes a function call to terminate
• Abandons exception processing and
terminates the program immediately
Exception Specifications
• Also called throw lists
• Keyword throw
• Comma-separated list of exception classes in
parentheses
• Example
• int someFunction( double value )
throw ( ExceptionA, ExceptionB,
ExceptionC )
{
...
}
• Indicates someFunction can throw types ExceptionA,
ExceptionB and ExceptionC
Exception Specifications

• A function can throw only exceptions of types


in its specification (or derived types)
• If a function throws a non-specification exception,
function unexpected is called
• This normally terminates the program
• Absence of exception specification indicates
that the function can throw any exception
• An empty exception specification, throw(),
indicates the function cannot throw any
exceptions
Error Note

• The compiler will not generate a compilation error if


a function contains a throw expression for an
exception not listed in the function’s exception
specification.
• Error occurs only when that function attempts to
throw that exception at run time.
• To avoid surprises at execution time, carefully
check your code to ensure that functions do not
throw exceptions not listed in their exception
specifications
Constructors and Destructors
• Exceptions and constructors
• Exceptions enable constructors to report errors
• Unable to return values
• Exceptions thrown by constructors cause any already-
constructed component objects to call their destructors
• Only those objects that have already been constructed will be
destructed
• Exceptions and destructors
• Destructors are called for all automatic objects in the
terminated try block when an exception is thrown
• Acquired resources can be placed in local objects to
automatically release the resources when an exception occurs
• If a destructor invoked by stack unwinding throws an
exception, function terminate is called
Note

• When an exception is thrown from the constructor for an


object that is created in a new expression, …

• … the dynamically allocated memory for that object is


released.
Exceptions and Inheritance

• New exception classes can be defined to inherit from


existing exception classes

• A catch handler for a particular exception class can also


catch exceptions of classes derived from that class.

• Enables catching related errors with a concise notation


Failure of calls to new
• Some compilers throw a bad_alloc exception
• Compliant to the C++ standard specification

• Some compilers return 0


• C++ standard-compliant compilers also have a version
of new that returns 0
• Use expression new( nothrow ), where nothrow is of
type nothrow_t

• Some compilers throw bad_alloc if <new> is included .


Standard Library Exception Hierarchy
• Base-class exception
• Contains virtual function what for storing error
messages
• Exception classes derived from exception
• bad_alloc – thrown by new
• bad_cast – thrown by dynamic_cast
• bad_typeid – thrown by typeid
• bad_exception – thrown by unexpected
• Instead of terminating the program or calling the function
specified by set_unexpected
• Used only if bad_exception is in the function’s throw list
Standard Library exception classes.
Next Session
Manipulating Strings

Thank You

You might also like