std::
set_terminate
函数 <exception>
C++98 |
terminate_handler set_terminate (terminate_handler f) throw();
|
C++11 |
terminate_handler set_terminate (terminate_handler f) noexcept; |
设置终止处理函数
设置f为终止处理函数。
终止处理函数是当异常处理过程由于某些原因不得不放弃时自动调用的函数。
当无法为抛出的异常找到catch处理程序时,或者在某些其他异常情况下无法继续异常处理过程时,就会发生这种情况。
在程序第一次调用此函数之前,默认行为是调用abort。
被terminate调用时,程序可以显式地调用当前终止处理程序函数.
☲ 参数
-
f
-
不带参数也不返回值的函数(void)。
该函数将终止程序的执行而不返回给调用者。
Terminate_handler是一个不带形参并返回void的函数指针类型。
☉ 返回值
前面的终止处理函数(如果有的话)。这可能是一个空指针。
Terminate_handler是一个不带参数也不返回值的函数指针类型。
☣ 示例
// set_terminate example
#include <iostream> // std::cerr
#include <exception> // std::set_terminate
#include <cstdlib> // std::abort
void myterminate () {
std::cerr << "terminate handler called\n";
abort(); // forces abnormal termination
}
int main (void) {
std::set_terminate (myterminate);
throw 0; // unhandled exception: calls terminate handler
return 0;
}
|
可能输出:
terminate handler called
Aborted
⇄ 数据竞争
调用这个函数不会引入数据竞争,并且任何这样的调用都会与后续的set_terminate和get_terminate调用同步。
注意,这个要求只适用于set_terminate函数,而不一定适用于作为参数(f)传递的terminate处理函数。
☂ 异常安全性
无抛出保证:该成员函数从不抛出异常。
注意,如果f是一个没有实现正确功能(如上所述)的函数,或者f是一个无效或空指针,它会导致未定义的行为。
🍄 另请参阅