std :: runtime_error会复制构造函数中传递的字符串吗?

时间:2012-05-17 23:39:31

标签: c++ exception

我想知道这条线是否会产生悬空指针:

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

std::runtime_error复制string,还是存储引用?

3 个答案:

答案 0 :(得分:10)

std::exception(其中std::runtime_error继承自来自)必须复制该消息,即使该标准未明确调出(我可以找到)。 exception类没有理由期望what()消息的来源在一般情况下会比它长。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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