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, что синтаксическая ошибка.