我想知道这一行是否创建了一个悬空指针:
string arg="derp";
throw std::runtime_error("Unknown argument "+arg);
std::runtime_error
复制string
,还是存储参考?
std::exception
(std::runtime_error
继承自)必须制作消息的副本,即使标准中没有明确指出(我可以找到)。在一般情况下,班级没有理由exception
期望消息的来源会比它更长寿。what()
它需要一个字符串引用。并将其作为引用传递给 catch 块,但是如果您将字符串文字传递给构造函数,它将创建一个临时字符串对象。另外,不要对字符串执行 + arg ,这是语法错误。
指针在哪里?const std::string&
您正在复制字符串文字并在构造运行时错误时将其隐式转换为。