mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 09:01:40 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* C++ exception handling example
 | 
						|
 | 
						|
   This example code is in the Public Domain (or CC0 licensed, at your option.)
 | 
						|
 | 
						|
   Unless required by applicable law or agreed to in writing, this
 | 
						|
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 | 
						|
   CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
*/
 | 
						|
 | 
						|
#include <iostream>
 | 
						|
 | 
						|
using std::cout;
 | 
						|
using std::endl;
 | 
						|
using std::runtime_error;
 | 
						|
 | 
						|
/* A simple class which may throw an exception from constructor */
 | 
						|
class Throwing
 | 
						|
{
 | 
						|
public:
 | 
						|
    Throwing(int arg)
 | 
						|
    : m_arg(arg)
 | 
						|
    {
 | 
						|
        cout << "In constructor, arg=" << arg << endl;
 | 
						|
        if (arg == 0) {
 | 
						|
            throw runtime_error("Exception in constructor");
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    ~Throwing()
 | 
						|
    {
 | 
						|
        cout << "In destructor, m_arg=" << m_arg << endl;
 | 
						|
    }
 | 
						|
 | 
						|
protected:
 | 
						|
    int m_arg;
 | 
						|
};
 | 
						|
 | 
						|
/* Inside .cpp file, app_main function must be declared with C linkage */
 | 
						|
extern "C" void app_main(void)
 | 
						|
{
 | 
						|
    cout << "app_main starting" << endl;
 | 
						|
 | 
						|
    try {
 | 
						|
        /* This will succeed */
 | 
						|
        Throwing obj1(42);
 | 
						|
 | 
						|
        /* This will throw an exception */
 | 
						|
        Throwing obj2(0);
 | 
						|
 | 
						|
        cout << "This will not be printed" << endl;
 | 
						|
    } catch (const runtime_error &e) {
 | 
						|
        cout << "Exception caught: " << e.what() << endl;
 | 
						|
    }
 | 
						|
 | 
						|
    cout << "app_main done" << endl;
 | 
						|
}
 |