Std:: runtime_error скопировать строку, переданную в конструкторе?

Интересно, создает ли эта строка висячий указатель:

string arg="derp";
throw std::runtime_error("Unknown argument "+arg);

Выполняет ли std::runtime_error копирование string или сохраняет ссылку?

Ответ 1

std::exception (который наследует std::runtime_error) должен сделать копию сообщения, даже если это не вызвано в стандартном явном виде (которое я могу найти). Нет причин для класса exception ожидать, что источник сообщения what() переведет его в общем случае.

Ответ 2

Где указатель? Вы копируете строковый литерал и неявно бросаете его на const std::string& при построении ошибки времени выполнения.

Ответ 3

требуется строка refrence. И передает это в блок catch как ссылку, однако, если вы передадите строку, несущую запись в конструктор, она создаст объект строки temp. Кроме того, не делайте + arg с строкой litterial, что синтаксическая ошибка.