Почему (потенциально) копируются исключения C++C++

Программы на C++. Форум разработчиков
Anonymous
Почему (потенциально) копируются исключения C++

Сообщение Anonymous »

Из этого ответа и подобных страниц я узнал, что исключения могут быть скопированы в процессе создания. Я также узнал, что это копирование не должно вызывать никаких дополнительных исключений, иначе будет вызван std::terminate(). Это затрудняет написание классов исключений, поскольку, например. std::string может вызвать исключение при копировании.

Мой вопрос: почему C++ позволяет компилятору копировать исключения? В чем будет недостаток, если выбрасывать их по ссылке или указателю и требовать от программистов перехватывать их по ссылке или указателю, а не по значению?

Похоже, что решением могло бы стать обертывание любых нетривиальных членов во что-то вроде std::shared_ptr и копирование этого указателя вместо объекта, который он содержит. Но тогда мы теряем все потенциальные преимущества копирования (например, тот факт, что вы можете редактировать копию, в то время как оригинал остается неизменным). Так почему же C++ вообще настаивает на возможности копирования исключения?

Подробнее здесь: https://stackoverflow.com/questions/589 ... lly-copied

Вернуться в «C++»