捕获异常后崩溃
Crashing after catching exception
为什么在捕获std::bad_exception后崩溃?(我用的是VC7)
#include "stdafx.h"
#include <exception>
int validateInt (int x) throw (int,std::bad_exception) {
if ( 0 == x ) {
throw std::bad_exception("x");
}
return x;
}
class C {
int i;
public:
C(int);
};
C::C(int ii)
try : i( validateInt(ii) ) {
std::cout << "I'm in constructor function bodyn";
} catch (std::exception& e) {
std::cout << "I caught an exception...n";
}
int _tmain(int argc, _TCHAR* argv[]) {
C a(0);
return 0;
}
因为您无法阻止异常离开构造函数初始化列表。捕获它之后,它会自动重新抛出。(然后它崩溃了,因为你有一个未处理的异常。)
这是一件好事:如果你的成员不能正确初始化,你的类就不能正确存在。
相关文章:
- 当类定义不可见时捕获异常
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- 如何通过 pybind11 从 python 中的C++中捕获异常?
- 信号后未捕获异常
- 捕获异常后如何退出程序执行
- C++ 捕获异常后进行清理的标准方法是什么?
- 使用模板类引发和捕获异常
- E/libc++abi:终止于类型为google::protobuf::FatalException的未捕获异常
- 如果在生成 std::thread 后引发,则未捕获异常
- C++ 未捕获异常,程序将终止并中止
- C++程序在第一次尝试时会给出垃圾,但如果它捕获异常并重试,则会给出适当的值
- 仅捕获异常就可以检测所有二进制文件在C 中读取错误是否足够
- 如何捕获 I/O 异常(确切地说是 I/O,而不是 std::exception)
- 为什么捕获异常播放允许尾括号
- throw() 函数应该总是在异常时展开堆栈并允许捕获异常还是必须调用 std::terminate ?
- 寻求与类型为 std::invalid_argument 的未捕获异常相关的运行时错误的建议: stoi:无转换
- 如何从调用函数中捕获异常
- 助推.测试崩溃,***异常:MSVC上的其他
- 捕获异常后崩溃
- Catch(…)没有捕获异常,我的程序仍然崩溃