什么是字符串对象的生命周期传递到std :: runtime_error' s ctor?

时间:2016-12-12 01:44:28

标签: c++ c++11 exception standards object-lifetime

根据cppreferencesexplicit runtime_error( const std::string& what_arg );不会复制what_arg的内容。

我可以安全地将临时字符串对象传递到std::runtime_error ctor吗?

例如:

std::string GetATempString(const char* msg)
{
    return { msg };
}

int main()
{
    try {
        throw std::runtime_error(GetATempString("Hello"));
    } catch (const std::runtime_error& e) 
    {
            e.what(); // Is it guaranteed that "Hello" would be returned safely?
    }
}

1 个答案:

答案 0 :(得分:5)

你误解了。 std::runtime_error总是将字符串复制到引用计数的写时复制内部缓冲区,因为它可能在以后复制时不会抛出异常。