15

我想知道这一行是否创建了一个悬空指针:

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

std::runtime_error复制string,还是存储参考?

4

3 回答 3

13

std::exceptionstd::runtime_error继承自)必须制作消息的副本,即使标准中没有明确指出(我可以找到)。在一般情况下,班级没有理由exception期望消息的来源会比它更长寿。what()

于 2012-05-17T23:52:09.877 回答
1

它需要一个字符串引用。并将其作为引用传递给 catch 块,但是如果您将字符串文字传递给构造函数,它将创建一个临时字符串对象。另外,不要对字符串执行 + arg ,这是语法错误。

于 2012-05-17T23:46:51.173 回答
0

指针在哪里?const std::string&您正在复制字符串文字并在构造运行时错误时将其隐式转换为。

于 2012-05-17T23:43:31.620 回答