这是代码:
#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
如何设法打印我想要的内容?
答案 0 :(得分:7)
您应该按值抛出异常并通过引用捕获它。
你应该:
throw excp1();
抛出具有动态内存分配的指针类型会泄漏内存并导致未定义的行为。
答案 1 :(得分:1)
我认为你遇到了类型问题:
您正在抛出excp*
并抓住excp
。
尝试将其更改为:
throw excp1;
答案 2 :(得分:0)
取出“新”。你的捕获没有抓到一个指针,它正在捕捉一个引用,所以它正在看指针并说“我?没办法。”