函数
<exception>

std::set_terminate

terminate_handler set_terminate (terminate_handler f) throw();
terminate_handler set_terminate (terminate_handler f) noexcept;
设置终止处理函数
设置 f 作为终止处理函数

终止处理函数是在异常处理过程因某种原因不得不中止时自动调用的函数。当一个被抛出的异常找不到匹配的 catch 语句时,或者因为其他使得异常处理过程无法继续的异常情况发生时,就会发生这种情况。

在程序第一次调用此函数之前,默认行为是调用 abort

程序可以通过调用 terminate 来显式调用当前的终止处理函数

参数

f
不接受任何参数且不返回任何值的函数(void)。
该函数应终止程序的执行,而不返回给调用者。
terminate_handler 是一个不接受任何参数且不返回任何值的函数指针类型void.

返回值

先前的终止处理函数(如果有)。这可能是一个空指针
terminate_handler 是一个不接受任何参数且不返回任何值的函数指针类型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 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_terminateget_terminate 的调用同步。

请注意,此要求仅适用于 set_terminate 函数,而不一定适用于作为参数(f)传递的终止处理函数

异常安全

无异常保证:此函数(set_terminate)永远不会抛出异常。

请注意,如果 f 是一个未实现正确功能的函数(如上所述),或者 f 是一个无效或空指针,则会导致未定义行为

另见