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

Can't decide what message to print after catching an exception

本文关键字:打印 消息 决定 捕获异常      更新时间:2023-10-16

这是代码:

#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;
}

但它并没有打印我输入的返回值("Bad ass exception"),而是打印:

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

如何打印我想要的内容?

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

你应该有:

throw excp1();

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

我认为您遇到了一个类型问题:

你扔了一个excp*,却接住了一个excp

尝试将其更改为:

throw excp1;

取出"new"。你的catch不是在捕捉指针,而是在捕捉引用,所以它看着指针说"我?不可能。"