传递给 std::runtime_error 的 ctor 的字符串对象的生命周期是多少?
What's the life time of the string object passed into std::runtime_error's ctor?
根据cppreferences,explicit 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?
}
}
你误会了。 std::runtime_error
始终将字符串复制到引用计数的写时复制内部缓冲区中,因为稍后复制时可能不会抛出异常。
根据cppreferences,explicit 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?
}
}
你误会了。 std::runtime_error
始终将字符串复制到引用计数的写时复制内部缓冲区中,因为稍后复制时可能不会抛出异常。