当我切换编译器时,我信任的旧
throw
代码(如下面的示例)将失败。我猜测问题可能是err
变量的范围?发生的情况是,在尝试访问err
的字符串部分时,它已被释放。使用自定义异常类更好的方式是什么?if (someErrorHappend)
{
std::stringstream err;
err << "Some error #" << GetLastError() << ".";
throw SomeCustomException("MyClass", "MyFunc", err.str().c_str());
}
SomeCustomException
的构造函数需要复制字符串。您只需小心,不要在尝试抛出异常时引发异常。如果使用C++11移动语义正确实现,则不应该有问题。 - Cody Gray