Из этого ответа и подобных страниц я узнал, что исключения могут быть скопированы в процессе создания. Я также узнал, что это копирование не должно вызывать никаких дополнительных исключений, иначе будет вызван std::terminate(). Это затрудняет написание классов исключений, поскольку, например. std::string может вызвать исключение при копировании.
Мой вопрос: почему C++ позволяет компилятору копировать исключения? В чем будет недостаток, если выбрасывать их по ссылке или указателю и требовать от программистов перехватывать их по ссылке или указателю, а не по значению?
Похоже, что решением могло бы стать обертывание любых нетривиальных членов во что-то вроде std::shared_ptr и копирование этого указателя вместо объекта, который он содержит. Но тогда мы теряем все потенциальные преимущества копирования (например, тот факт, что вы можете редактировать копию, в то время как оригинал остается неизменным). Так почему же C++ вообще настаивает на возможности копирования исключения?
Подробнее здесь: https://stackoverflow.com/questions/589 ... lly-copied