无法捕获std :: runtime_error

时间:2015-08-20 17:58:43

标签: c++ c++11 exception exception-handling

也许我今天没有喝足够的咖啡。以下程序应该捕获std :: runtime_error并打印“我捕获了runtime_error”,对吗?

不是。这个程序没有捕获std :: runtime_error而是打印“为什么我无法捕获runtime_error”?

我在这里做错了什么?为什么我没有捕获std :: runtime_error?

这是Clang(参见下面代码的环境信息)。

#include <iostream>
#include <exception>

int main(int argc, const char * argv[])
{
    try
    {
        throw new std::runtime_error( "a runtime_error was thrown" );
    }
    catch ( const std::runtime_error& e )
    {
        std::cout << "i caught the runtime_error" << std::endl;
    }
    catch ( ... )
    {
        std::cout << "why was i unable to catch the runtime_error?" << std::endl;
    }
    return 0;
}

OS X 10.9.5上的Xcode 5.1.1

comp:~ usrn$ clang --version
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix
comp:~ usern$ 

1 个答案:

答案 0 :(得分:10)

您正在投掷new std::runtime_error( "a runtime_error was thrown" );

所以你要投掷std::runtime_error*

你可能想做throw std::runtime_error("..."),即按价值投掷。