设置Terminate和Unexpected Handler

时间:2017-11-04 11:43:27

标签: c++ exception-handling

你能解释一下:

  

terminate_handler set_terminate(terminate_handler f)throw();

和此:

  

unexpected_handler set_unexpected(unexpected_handler f)throw();

要更改我们使用的终止处理程序,必须使用set_terminate(),如上所示,但我无法理解/解释上述形式。谁能解释一下呢。

我也很难理解这一点:

  

terminate_handler set_terminate(terminate_handler f)throw();

     

下面,    f是指向新终止处理程序的指针。该函数    返回指向旧的终止处理程序的指针。新的终止    handler必须是terminate_handler类型,其定义如下:

     

typedef void(* terminate_handler)();

1 个答案:

答案 0 :(得分:4)

terminate_handler是函数指针的typedef。设置终止处理程序时,将指针传递给要在终止时调用的函数。这是set_terminate的论据。该函数返回旧指针。这样,如果您只想在短时间内使用自己的终止处理程序,则可以在完成后恢复上一个处理程序:

void my_terminator() {
    // whatever
}

int main() {
    // terminate here calls default handler

    terminate_handler old_handler = set_terminate(my_terminator);
    // now, terminate will call `my_terminator`

    set_terminate(old_handler);
    // now, terminate will call the default handler

    return 0;
}