Every stable program should somehow handle all that can go wrong, within the code. As C behaves pretty much predictable, but is prone to buffer overflow bugs, there are many other things that can go wrong in C++, like running out of memory while the class instance is being constructed (Strings for example). C++ has built-in try - catch functionality for these purposes, but it is not included in Arduino, which either throws the exception resulting in restarting the controller or completely ignores the error (like in String case, where the program is not even aware that something went wrong).
Taking a look at the code samples above, just for example, there is no check implemented if String construction from PROGMEM succeeded or not:
myExtraloongString_SS = F("less than 64 characters");
This is why I try to avoid using Strings (it is just the same with std::strings) when I'm not 100% there is plenty of memory always available.