你没有接住你扔的东西。你在扔一个
exception *
你想抓住一个
exception
.
你几乎不应该扔
new
异常,您应该只抛出一个异常,然后应该捕获对所述异常的常量引用,例如:
#include <exception>
#include <iostream>
int
x(int y)
{
throw std::exception();
}
int
main(int argc, char **argv)
{
try {
x(2);
} catch (const std::exception &e) {
std::cout << "Oops" << std::endl;
}
return 0;
}
如果我使用了你的代码,我会因为一个未捕获的异常类型而终止程序
std::exception *
(注意,它是指向
std::exception
,不是
std::异常
.
此外,我不知道你想用
e.~exception();
。它在该代码中没有位置。如果您试图删除您的异常
新
d、 那么你应该
delete
像这样对析构函数的显式调用表明您很难理解对象生命周期;这是
C++
语言
查尔斯·贝利的
answer to this question
也会详细说明为什么会这样。