I implemented my exception class which inherited from std::exception like the following :
class MyException : public exception
{
public:
MyException(string exc)
{
this->exc = exc;
}
const char * what() const throw ()
{
return exc.c_str();
}
private:
string exc;
};
Now i throw MyException manually and suppose that an exception occurred in my code, But i tested it in two different ways in catch section :
Catch normally
catch (const std::exception exc)try { throw MyException("This is an exception"); } catch (const std::exception exc) { MessageBoxA(NULL, exc.what(), "", MB_OK); }Catch with reference
catch (const std::exception &exc)try { throw MyException("This is an exception"); } catch (const std::exception &exc) { MessageBoxA(NULL, exc.what(), "", MB_OK); }
The first thrown exception string is :
Unknown exception
And the second thrown exception (The one that has & in catch section) is :
This is an exception
Why can't i get my custom exception string while using catch normally without reference(&) and why is it OK by reference?