John M Gant John M Gant -4 years ago 51
C++ Question

Should I inherit from std::exception?

I've seen at least one reliable source (a C++ class I took) recommend that application-specific exception classes in C++ should inherit from

std::exception
. I'm not clear on the benefits of this approach.

In C# the reasons for inheriting from
ApplicationException
are clear: you get a handful of useful methods, properties and constructors and just have to add or override what you need. With
std::exception
it seems that all you get is a
what()
method to override, which you could just as well create yourself.

So what are the benefits, if any, of using
std::exception
as a base class for my application-specific exception class? Are there any good reasons not to inherit from
std::exception
?

Answer Source

The main benefit is that code using your classes doesn't have to know exact type of what you throw at it, but can just catch the std::exception.

Edit: as Martin and others noted, you actually want to derive from one of the sub-classes of std::exception declared in <stdexcept> header.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download