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