C++ Tutorial Index

C++ Tutorial C++ History C++ Installation C++ First Program C++ cin and cout C++ Data type C++ Variable C++ operator C++ Keywords

C++ Control Statements

C++ If C++ Nested if C++ If-else C++ If-else-if C++ Switch C++ Break C++ Continue C++ Goto C++ For loop C++ While loop C++ Do while loop

C++ Functions

C++ Call by Value C++ Call by Reference C++ Recursion Function C++ Inline function C++ Friend function

C++ Arrays

Single dimension array Two dimension array

C++ Strings

C++ Strings

C++ Inheritance

C++ Inheritance Single level Inheritance Multilevel Inheritance Multiple Inheritance Hierarchical Inheritance Hybrid Inheritance

C++ Polymorphism

C++ Polymorphism C++ Overloading C++ Overriding C++ Virtual Function

C++ Pointers

C++ Pointers C++ this pointer

C++ Exception Handling

C++ Exception Handling

C++ Constructors

C++ Constructors Default Constructor Parameterize Constructor Copy constructor Constructor Overloading Destructor

C++ File Handling

C++ File Handling C++ Writing to file C++ Reading file C++ Close file

Miscellaneous

C Vs C++ C++ Comments C++ Data Abstraction C++ Identifier C++ Memory Management C++ Storage Classes C++ Void Pointer C++ Array To Function C++ Expressions C++ Features C++ Interfaces C++ Encapsulation std::min in C++ External merge sort in C++ Remove duplicates from sorted array in C++ Precision of floating point numbers Using these functions floor(), ceil(), trunc(), round() and setprecision() in C++ C++ References C++ Friend Functions C++ Mutable keyword Unary Operators in C++ Initialize Array of objects with parameterized constructors in C++ Differences between #define & const in C/C++ C++ Program to Implement Shell Sort C++ Program to Implement Merge Sort Storage Classes in C Vector resize() in C++ Passing by Reference Vs. Passing by the pointer in C++ Free vs delete() in C++ goto statement in C and C++ C++ program to read string using cin.getline() C++ String Concatenation Heap Sort in C++ Swap numbers in C++ Input Iterators in C++ Fibonacci Series in C++ C ++ Program: Alphabet Triangle and Number Triangle C++ Program: Matrix Multiplication C++ Program to Print Fibonacci Triangle Stack in C++ Maps in C++ Queue in C++ C++ Bitset C++ Algorithms Priority Queue in C++ C++ Multimap C++ Deque Function Pointer in C++ Sizeof() Operators in C++ C++ array of Pointers free() Vs delete in C Timsort Implementation Using C++ CPP Templates C++ Aggregation C++ Enumeration C++ Math Functions C++ Object Class C++ Queue Initialize Vector in C++ Vector in C++ C++ STL Components Function overloading in C++ C++ Maximum Index Problem C++ find missing in the second array C++ Program to find the product array puzzle C++ Program To Find Largest Subarray With 0 Sum C++ Program To Move All Zeros To The End Of The Array C++ Program to find the element that occurs once C++ Program to find the largest number formed from an array Constructor Vs Destructor C++ Namespaces C++ OOPs Concept C++ Static C++ Structs C++ Try-Catch C++ User Defined Exceptions C++ Virtual Destructor C++ vs C# Malloc() and new in C++ Palindrome Number Program in C++ Snake Code in C++ Splitting a string in C++ Structure Vs Class in C++ Virtual Function Vs Pure Virtual Function C++ Bidirectional Iterators C++ Forward Iterators C++ Iterators C++ Output Iterators C++ Range-based For Loop Converting string into integer in C++ LCM Program in C++ Type conversion in C++ Add two numbers using the function in C++ Advantage and disadvantage friend function C++ Armstrong Number Program in C++ ATM machine program in C++ using functions Binary to Decimal in C++ Bit Manipulation in C++ C++ Constructor C++ Dijkstra Algorithm Using the Priority Queue C++ int into String C++ Signal Handling Decimal to Binary in C++ Decimal to Hexadecimal in C++ Decimal to Octal in C++ Factorial Program in C++ Function in C++ Hexadecimal to Decimal in C++ Octal to Decimal in C++ Reverse a Number in C++ Structure Vs Class in C++ C++ Forward Iterators C++ Output Iterators C++ Prime number program Char Array to String in C++ Constructor Overloading in C++ Default arguments in C++ Different Ways to Compare Strings in C++ Dynamic Binding in C++ Program to convert infix to postfix expression in C++ SET Data Structure in C++ Upcasting and Downcasting in C++ Reverse an Array in C++ Fast Input and Output in C++ Delete Operator in C++ Copy elision in C++ C++ Date and Time C++ Bitwise XOR Operator Array of sets in C++ Binary Operator Overloading in C++ Binary Search in C++ Implementing the sets without C++ STL containers Scope Resolution Operator in C++ Smart pointers in C++ Types of polymorphism in C++ Exception Handling in C++ vs Java Const Keyword in C++ Type Casting in C++ Static keyword in C++ vs Java Inheritance in C++ vs Java How to concatenate two strings in C++ Programs to Print Pyramid Patterns in C++ swap() function in C++ Structure of C++ Program Stringstream in C++ and its applications rand() and srand() in C / C++ C++ Ternary Operator C++ Scope of Variables While Loop Examples in C++ Star pattern in C++ using For Loops For Loop Examples in C++ Do-While Loop Examples in C++ Top 5 IDEs for C++ That You Should Try Once Assertions in C/C++ C++ Convert Int to String Continue in C++ While loop Diamond Pattern in C++ using For Loop How to Reverse a String in C++ using Do-While Loop How to Reverse a String in C++ using For Loop How to Reverse a String in C++ using While Loop Infinite loop in C++ Loops in C++ Returning Multiple Values from a Function using Tuple and Pair in C++ wcscpy(), wcslen(), wcscmp() Functions in C++ Auto keyword in C++ C++ 11 vs C++ 14 vs C++ 17 C++ STL (Standard Template Library) Differences Between C Structures and C++ Structures Divide by Zero Exception in C++ Dynamic Constructor in C++ Dynamic Memory Allocation in C++ Find the Size of Array in C/C++ without using sizeof() function Floating Point Operations and Associativity in C, C++ and Java Hello World Program in C++ How to create a table in C++ How to Setup Environment for C++ Programming on Mac Implementation of a Falling Matrix in C++ Message Passing in C++ Pointer to Object in C++ Templates in C++ vs Generics in Java Ways to Copy a Vector in C++ What does Buffer Flush mean in C++ sort() function in C++ Structure Sorting (By Multiple Rules) in C++ Similarities between C++ and Java std::distance in C++ Array program in C++ C++ Tricks for Competitive Programming Desired Capabilities in Selenium Web Driver in C++ Socket Programming in C++ Template Specialization in C++ Classes and Objects in C++ Convex hull Algorithm in C++ DES in C++ C++ vardiac() function Difference between Two Sets in C++ Difference between Exit and Return Structured Binding in C++ Differences between Local and Global Variable Bitwise Operator vs Logical Operator Difference between OOP and POP in C++ Fork in C++ Functors in C++ How to call a void function in C++ How to create a directory or folder in C/C++ How to create a library in C++ How to create a stack in C++ How to create the Processes with Fork in C++ How to Handle Divide by Zero Exception in C++ Lambda Expression in C++ Pattern programs in C++ Roadmap to C++ Programming Substring in C++ Virtual base class in C++ Bits stdc++.h in C++ Top 14 Best Free C++ IDE (Editor & Compiler) for Windows in 2022 Bitmasking in C++ Auto Keyword in C++ Features of OOPS in C++ Hospital Management Project in C++ How to Declare Unordered Sets in C++ How to Sort an Array in C++ Include Guards in C++ Iostream in C++ Method overriding in C++ How to run program in turbo c++ How to Use Getline in C++ Leap Year Program in C++ Naming Convention in C++ New Operator in C++ Nullptr in C++ Object Slicing in C++ Principles of Object-Oriented Programming in C++ Processing strings using std string stream in C++ Pure Virtual Function in C++ With Example Program Random Number Generator in C++ Singleton Design Pattern in C++ Size_t Data Type in C++ Skyline Problem in C++ System() function in C++ Web Development in C++ Data Hiding in C++ Difference between exit() and _Exit() in C++ Hashing in C++ Object in C++ Sum of all Elements between k1’th and k2’th Smallest Elements Virtual class in C++ Vector Size in C++ Top best IDEs for C/C++ Developers in 2022 Tensorflow in C++ Sliding Window Technique in C++ Reverse String Word-Wise in C++ Returning a Function Pointer from a Function in C/C++ RTTI in C++ Pthreads or POSIX Threads in C++ Reserved Keywords in C++ Passing a Vector to a function in C++ 10 Best C and C++ Books for Beginners & Advanced Programmers Add two numbers represented by two arrays in C++ Array of Object in C++ C++ Program For FCFS Containership in C++ Counting Frequencies of Array Elements in C++ Decltype type Specifier in C++ Dynamic _Cast in C++ Difference between int main() and int main(void) in C/C++ Depth First Search Program to Traverse a Graph in C++ Features and Use Of Pointers in C/C++ Fread Function in C++ Programming Fscanf Function in The C++ Functions in C++ With Types and Examples Gmtime Function in C/C++ How is Multiset Implemented in C++ How to Build a Program in C++ How to Declare a 2d Array Dynamically in C++ inheritance Program in C++ int Max and int Min in C/C++ is It Fine to Write Void Main Or Main in C/C++ How to create a button in C++ abs() function in C++ Compile Time Polymorphism in C++ Division in C++ Factorial of a Number in C++ using while Loop Multiset in C++ 4 Pillars of OOPs Approach in C++ Backtracking Time Complexity in C++ C++ Global Variable C++ Pipe Tutorial Observer Design Pattern in C++ Private Inheritance in C++ Pthread in C++ Parameters SDL library in C++ with Examples Pointers in C++ Abstract Factory Design Pattern in C++ Ascending order in C++ How the value is passed in C++ Call by Pointer in C++ Constexpr in C++ Deadlock in C++ Design Patterns in C++ Factory Method for Designing Pattern in C++ How to calculate size of string in C++ Name Mangling and extern in C++ Preventing Object Copy in C++ Program that produces different results in C and C++ Quick Sort in C++ Single Handling in C++ Type difference of Character literals in C VS C++ Use of Inheritance in C++ User-defined literals in C++ Vector methods in C++ Void * in C and C++ Zombie and Orphan Process in C++ Isprint() in C++ List and Vector in C++ List iterators in C++ Merging Two Vectors in C++ Sleep function in C++ Stoi function in C++ String erase() in C++ String Trim in C++ When should we write own Assignment operator in C++ C++ tcp client server example C++ tcp server example Early Binding and Late Binding in C++ Factory Design Pattern in C++ Fisher-Yates shuffle algorithm in C++ For Auto in C++ Group anagrams in C++ How to convert binary string to int in C++ How to convert string to float in C++ How to remove space from string in C++ How to use pair in C++ How to use the string find() in C++ Dynamic Casting in C++ 2D Vector Initialization in C++ C++ GUI Visual Studio C++ IPC C++ Macro Function Example C++ Permutation Overloading Stream Insertion in C++ Overloading array Index operator in C++ Operators that cannot be overloaded in C++ Operator overloading in C++ isprint() function in c++ Is_trivial function in C++ Is assignment operator Inherited in C++ div() function in C++ Default Assignment Operator and References in C++ Copy Constructor vs Assignment Operator in C++ Conversion Operator in C++ Array sum in C++ STL C++ Define Macro C++ Design C++ Factory Pattern TCP Client Server Example in C++ Convert String to Uppercase in C++ exit() and _Exit() in C and C++ Initializer list in C++ Iterator invalidation in C++ Lower bound in C++ Modulus of Two float numbers or double number Pass by value in C++ Set insert function in C++ Std partition_point in C++ Unary Operator Overloading in C++ Using Default Arguments with Virtual Functions Virtual Functions and Runtime Polymorphism What is endl in C++ What is Unary Operator Overloading in C++ Which operators cannot be overloaded in C++ C++ Program to Divide the String Into N equal Parts Gray Code to Binary Code in C++ How to get the value of pi in C++ Multimap value_comp() function in C++ Vector of Vectors in C++ Naïve Bayes Algorithm in C++ Minimum Cost Path Problem in C++ 10 C++ Programming Tricks You Should Know btowc() function in C++ forward_list::cend() in C++ Unordered_multimap max_load_factor() function in C++ Cpp_int in c++ Dynamic Objects in C++ FLOCK() FUNCTION IN C++ Generate Random Double Numbers in C++ How to Assign Infinity to a Number in C++ Jump statements in C++ Multipath inheritance in C++ Out of Range Exception in C++ Size of Class in C++ Size of string in C++ std::binary_negate in c++ Thread_local in C++ Tokenizing a String in C++ Ancestors of a Node in Binary Search Tree C++ program for Double to String Conversion C++ Program to Demonstrate Use of Formatting Flags on Float Output Clamp in C++ K-Dimensional Tree in C++ Mutable Lambda in C++ Power Set in C++ Program to Find Sum of Geometric Progression Std::Back_inserter in C++ Strpbrk() function in C++ Size of int in C++ TYPES OF MANIPULATORS IN C++ Double colon in C++ How to sort vector in C++ How to use Setprecision in C++ How to write a Vector in C++ Insertion in Splay Tree in C++ Merge Sort Algorithm in C++ Printing a Character using ASCII value in C++ Regex in C++ Size of Data Types in C++ Sqrtf() function in C++ Static Casting in C++ Using Range in Switch Case in C++ wcstoimax() and wcstoumax() function in C++ What is float in C++ What is the Diamond Problem in C++ Best way to learn C++ ios setstate() function in C++ Nested Namespace in C++ Single Inheritance in C++ std::fixed, std::scientific, std::hexfloat, std::defaultfloat in C++ StringStream in C++ for Decimal to Hexadecimal and back The OFFSETOF() macro in C++ Difference between std::next and std::advance in C++ Hiding of all overloaded methods with same name in base class in C++ C++ program to concatenate two strings using operator overloading Difference between array::fill() and array::swap() in C++ Difference between Friend Function and Virtual Function in C++ Semaphores in C++ Seekg in C++ UDP server- client implementattion in C++ What is long long in C++ CSV file management using C++ Toggle bits of a number except first and last bits in C++ Trailing Return Type C++ 11 Binary search implementation in C++ Different Versions of C++ What is Cascading in C++ Background Colour in C++ BOOL DATATYPE IN C++ BIT VECTORS IN C++ Literals in C++ Application of pointer in C++ Index with minimum sum of prefix and suffix sums in an array in C++ Maximum sum Bi-tonic sub-sequence in C++ std::optional in C++ C/C++ program for triangular matchstick number COUT COMMAND IN C++ LANGUAGE Adjacency matrix program in C++ language Difference between Null String and Empty String in C++ Character data type in c++ Constructors in Inheritance C++ Comma Operator Overloading in C++ Structure and Class in C++ Template Definition in C++ Tree Data Structure in C++ Typename in C++ C++ program to implement the bin packing algorithm How to merge multiple std::sets into a single std::set in C++? Stack Clear C++ C++ Friend Class Seekg in C++ Semaphores in C++ C++ Exceptions Difference Between C and C++ Double-linked list program in C++ Color Code in C++ CRC Program in C++ Anti-Clockwise spiral traversal of a binary tree in C++ Advantages of OOP in C++ Cryptarithmetic Puzzle in C++ Angular sweep algorithm in C++

C++ Exceptions

Exception Handling is one of the reasons C++ is superior to C. Runtime abnormalities or unusual circumstances that a program runs across are known as exceptions. Two categories of exceptions exist: Asynchronous (i.e., exceptions outside the program's control, including disc failure, keyboard interrupts, etc.) and Synchronous (i.e., For this reason, C++ offers the following specific keywords:

  • Try this: It represents a code block with the ability to throw exceptions.
  • Catch: Denotes a sequence of instructions that is carried out in response to a specific exception being thrown.
  • Throw: A command for tossing an exception. Used to list exceptions that a function raises but is unable to handle as well.

Why Handle Exceptions?

The primary benefits of exception handling over conventional error handling are as follows:

  1. Error Handling Code Is Separated from Normal Code: Conventional error handling codes always use if-else statements to manage errors. The code is meant to handle errors, and these conditions get entangled with the regular flow. As a result, the code takes more work to read and update. The error-handling code is separated from the main flow using try/catch blocks.
  2. Only the exceptions that Functions and/or Methods decide to handle: Although a function may choose to handle some exceptions, it is capable of throwing numerous. The caller can deal with the other exceptions, which are thrown but not captured. The caller of the caller will handle the exceptions if the caller decides not to catch them.

The throw keyword in C++ allows a function to declare the exceptions it will throw. This function's caller needs to catch the exception or specify it again in order to manage it.

3. Classification of Error Types: Objects and basic types can both be thrown as exceptions in C++. It is possible to organize exceptions into namespaces or classes, construct a hierarchy of exception objects, and classify exceptions based on their types.

Exceptions in C++:

A variety of problems can arise when running C++ code, including mistakes in the code created by the programmer, errors brought on by incorrect input, and other unforeseen circumstances.

Normally, C++ will halt and provide an error message when an error occurs. This is known as "C++ will throw an exception" (error) in technical terms.

C++ attempt to catch:

In C++, there are three keywords for managing exceptions: try, throw, and catch.

You can specify a section of code to be tested for errors as it is being performed using the try statement.

When an issue is found, the throw keyword raises an exception, allowing us to write our unique error.

You can specify a block of code to be run in the event that an error occurs in the try block by using the catch statement.

The terms "try and catch" are paired:

We test some code using the try block: The catch block will handle an exception that is thrown if the value of the "age" variable is less than 18.

We detect errors and take appropriate action in the catch block. The catch statement requires one input. Therefore, we may send "int myInt" as the parameter to the catch statement, where the variable "myInt" is used to output the value of age if the value of age is 16, and that is the reason we are throwing an exception of type int in the try block (age).

If there is no mistake (for example, if the age is 21 rather than 16), it will be more than 18, and there is no catch block.

Managing Exceptions in C++

  1. Here is a basic example of how to handle exceptions in C++. The program's output describes how try/catch blocks are executed.

Example:

#include <iostream>

using namespace std;

int main()

{

   int y = -1;

   // Some code

   cout << "Before try block in code  \n";

   try {

      cout << "Inside try block \n";

      if (y < 0)

      {

         throw x;

         cout << "After throwing a block in code (No execution) \n";

      }

   }

   catch (int y ) {

      cout << "Exception found \n";

   }

   cout << "After catch block (Will be executed) \n";

   return 0;

}

Output:

Before try block

               Inside try block

               Exception found

               After catch block (Will be executed)

2. Any exception can be caught using a unique catch block known as the "catch all" block, which is represented by the notation catch(...). For instance, when an int is thrown as an exception in the program below, the catch(...) block will be run since there isn't a catch block for ints.

Code:

#include <iostream>

using namespace std;

int main()

{

try {

throw 8;

}

catch (char *excp) {

          cout << "Caught the Exception " << excp;

}

catch (...) {

          cout << " Exception\n";

}

return 0;

}

 Output:

  Exception

3. Primitive types do not undergo implicit type conversion. For instance, 'b' is not implicitly transformed to int in the program that follows.

Code:

#include <iostream>

                using namespace std;

                    int main()

                                     {

                           try {

                           throw 'b';

                              }

                         catch (int x) {

                            cout << "Caught Exception " << x;

                              }

                         catch (...) {

                            cout << " Exception\n";

                         }

                                     return 0;

                            }

4. The software stops erroneously if an exception is thrown and not captured somewhere. A char is thrown, for instance, in the program below, but no catch block is there to catch it.

Code:

#include <iostream>

using namespace std;

int main()

{

    try {

    throw 'b';

    }

    catch (int x) {

          cout << "Caught ";

    }

    return 0;

}

Output:

 terminate called after throwing an instance of 'char'
This application has requested the Runtime to terminate it unusually. Please get in touch with the application's support team for more information.

5. An exception from a derived class needs to be handled before one from a base class. For further information, view this.

6. The foundation class for all standard exceptions in the C++ library is the standard exception class, the same as in Java. This class is the base class from which all objects thrown by standard library components are derived. Therefore, by capturing this type, all standard exceptions may be captured.

7. All exceptions in C++ are unchecked, meaning that the compiler does not verify whether an exception is caught or not, in contrast to Java (See here for more). Therefore, only some uncaught exceptions have to be listed in a function declaration. Even if doing so is advised as a best practice. The program that follows, for instance, compiles OK, but ideally, the fun() signature should enumerate the untested exclusions.

Code:

#include <iostream>

using namespace std;

// This function signature is fine by the compiler, but not recommended.

// Ideally, the function should specify all uncaught exceptions and the function

// signature should be "void fun(int *ptr, int x) throw (int *, int)"

void fun(int *ptr, int x)

{

if (ptr == NULL)

          throw ptr;

if (x == 0)

          throw x;

/* Some functionality */

}

int main()

{

try {

fun(NULL, 0);

}

catch(...) {

          cout << "Found exception from fun()";

}

return 0;

}

 Output:

Found exception from fun()

Another method of writing the above function:

Code:

#include <iostream>

using namespace std;

// Here, we specify the exceptions that this function

// throws.

void fun(int *ptr, int x) throw (int *, int) // Dynamic Exception specification

{

if (ptr == NULL)

          throw ptr;

if (x == 0)

          throw x;

/* Some functionality */

}

int main()

{

try {

fun(NULL, 0);

}

catch(...) {

          cout << "found exception from fun()";

}

return 0;

}

Please take note that as of C++11, using the Dynamic Exception Specification has been discontinued. It could arbitrarily terminate your software, which could be one of the causes. This may occur if you throw an exception of a different kind than those specified in the dynamic exception definition. In such case, your program calls (indirectly) terminate(), which calls abort() by default. Thus, it will abort itself.

Output:

Found exception from fun()

8. Try/catch blocks in C++ to allow for nesting. Additionally, "throw;" can be used to rethrow an exception.

Code:

#include <iostream>

using namespace std;

int main()

{

try {

          try {

                    throw 20;

          }

          catch (int n) {

                    cout << "Partially handling ";

                    throw; // Re-throwing an exception

          }

}

catch (int n) {

          cout << "Remaining handling";

}

return 0;

}

Output:

Partially handling Reaming handling

The same "throw;" function may use syntax to toss itself again. A function can take care of some of the work and pass the rest to the caller.

9. All objects generated within the enclosing try block are destroyed upon the throwing of an exception prior to the control being passed to the catch block.

Code:

#include <iostream>

using namespace std;

class Test {

public:

Test() { cout << " Test Constructor " << endl; }

~Test() { cout << “ Test Destructor " << endl; }

};

int main()

{

try {

          Test t1;

          throw 10;

}

catch (int i) {

          cout << "Found" << i << endl;

}

}

Output:

Test Constructor

Test Destructor

Found

10. Rethrowung Exceptions:

           Rethrowing exceptions is a mechanism in C++ where an exception that is stuck in a seize block can be rethrown to allow it to propagate in addition up the call stack. This can be useful in eventualities where you need to capture an exception at one degree of your program and carry out some managing or logging, after which let the exception hold propagate up for further dealing with at a better degree.

    Code:

    #include <iostream>

    #include <stdexcept>

    void foo() {

        try {

            // Some code that might throw an exception

            throw std::runtime_error("Exception in foo()");

        } catch (const std::exception& e) {

            // Handle the exception at this level

            std::cerr << "Caught exception in foo(): " << e.what() << std::endl;

            // Rethrow the exception to let it propagate further

            throw; // This rethrows the caught exception

        }

    }

    int main() {

        try {

            foo();

        } catch (const std::exception& e) {

            std::cerr << "Caught exception in main(): " << e.what() << std::endl;

        }

        return 0;

    }

    In this situation:

    • The foo feature incorporates code that can throw an exception (std::runtime_error in this case).
    • Inside the seize block in foo, the stuck exception is logged or dealt with in a few ways.
    • The throw; declaration is used to rethrow the stuck exception.

    When an exception is rethrown, it continues to propagate up the call stack. In this case, the rethrown exception is stuck inside the catch block inside the principal characteristic.

    Rethrowing exceptions is beneficial when you want to deal with an exception at a particular level of your application; nevertheless, you need general exception management to occur at a higher stage. It lets in for a separation of worries, where exceptional parts of this system can handle exceptions specific to their context.

    11. Cleanup with ultimately (using RAII):

          C++ no longer has an ultimate block like a few other languages, but you may reap similar functionality using RAII (Resource Acquisition Is Initialization) standards. For instance, the use of smart recommendations and other useful resource control techniques.

      Code:

      #include <iostream>

      #include <memory>

      struct Cleanup {

          Cleanup() { std::cout << "Acquiring resources..." << std::endl; }

          ~Cleanup() { std::cout << "Releasing resources..." << std::endl; }

      };

      void exampleFunction() {

          Cleanup cleanup; // RAII: Resources acquired in the constructor, released in the destructor

          // ... rest of the function

      }

      int main() {

          try {

              exampleFunction();

          } catch (const std::exception& e) {

              std::cerr << "Caught exception: " << e.what() << std::endl;

          }

          return 0;

      }

              In this situation, the Cleanup struct ensures that resources are released while it is going out of scope, whether or not the feature completes commonly or an exception is thrown.

      12. Avoiding Resource Leaks:

             Be cautious when the usage of dynamic reminiscence allocation inside try blocks. If an exception happens and memory isn't well cleaned up, it can result in useful resource leaks. Smart pointers and different RAII-based totally lessons can assist save you from such leaks.

        13.Don't Use Exceptions for Control Flow:

            Exceptions are meant for incredible conditions, not for regularly manipulated glide. Overusing exceptions for flow management can make the code less readable and might have overall performance implications.

          Conclusion

                             In the end, exceptions in C++ provide a powerful mechanism for handling errors and tremendous conditions in an application. They permit you to separate mistakes handling code from the regular waft of your program, enhancing code readability and maintainability. Here are a few key points to remember about C++ exceptions:

          1. Throwing Exceptions:

          • Use the throw keyword to raise an exception when an amazing scenario takes place.
          • Exceptions may be of any kind. However, it is commonplace to use trendy exception instructions or custom exception lessons derived from std::exception.

          2. Catching Exceptions:

          • Employ try-catch blocks to handle exceptions.
          • Catch specific exception sorts to offer targeted error dealing with.
          • Use the catch (...) block for a time-honored trap-all case.