捕获异常后无法确定要打印的消息

时间:2012-01-30 19:01:26

标签: c++

这是代码:

#include <iostream>
#include <exception>

using namespace std;

class excp1:exception
{
    public:
    virtual const char* what() const throw()
    {
        return "Bad ass exception";
    }
};


int main(int argc, char **argv)
{
    try
    {
        if(1!=0)
            throw new excp1();
    }
    catch(excp1& e)
    {
        cerr<<e.what();
    }
    return 0;
}

但是它并没有打印出我所放置的东西(&#34; Bad ass exception&#34;),而是打印出来:

Terminate called after throwing an instance of' excp1*'
Aborted

如何设法打印我想要的内容?

3 个答案:

答案 0 :(得分:7)

您应该按值抛出异常并通过引用捕获它。

你应该:

throw excp1();

抛出具有动态内存分配的指针类型会泄漏内存并导致未定义的行为

答案 1 :(得分:1)

我认为你遇到了类型问题:

您正在抛出excp*并抓住excp

尝试将其更改为:

throw excp1;

答案 2 :(得分:0)

取出“新”。你的捕获没有抓到一个指针,它正在捕捉一个引用,所以它正在看指针并说“我?没办法。”