Exceptions are a big part of C++ and one of the reasons to use it (I know there are many, more important, other reasons) is to avoid needless checks that obfuscate code with a l
If every dereference of a shared pointer was required to check for nullptr
and conditionally throw an exception, there could be a lot of redundant checks, code bloat and overhead. Sure - the optimiser's likely to eliminate some of that, but still.... Instead, the programmer's expected to check once before however-many dereferences.