美文网首页
C++ 程序在退出时可能会调用的相关函数

C++ 程序在退出时可能会调用的相关函数

作者: JSTZ | 来源:发表于2020-05-02 08:59 被阅读0次

前言

一个程序可能在 main 函数里中通过 return 0; 退出,也可能在任何函数里调用 std::exit(EXIT_SUCCESS) 退出,又或者因为一些错误崩溃退出。本文介绍在开始退出时到程序完全退出调用了那些函数以及资源释放情况。

相关函数列表

函数详情

下文提到的资源包括:线程本地对象、静态变量、C 的文件描述符、std::tmpfile 打开的文件。

std::_Exit

终止程序,不清理资源。

std::abort

终止程序,会调用 SIGABRT 信号的处理函数,这个处理函数不会返回。

std::terminate

std::terminate 调用当前安装的 std::terminate_handler。默认的 std::terminate_handler 调用 std::abort 。

std::quick_exit

终止程序,清理部分资源。以注册顺序的逆序调用传递给 std::at_quick_exit 的函数。若调用这些函数抛出异常,则调用 std::terminate 。调用所有注册的函数后,调用 std::_Exit(exit_code) 。

不调用传递给 std::atexit 的函数。

std::exit

终止程序,清理所有资源(不包括栈上的对象)。

清理顺序:

  1. 所有的线程本地在静态变量前析构(如果 thread_local 有 static 修饰,依然在这一步析构)。
  2. 静态变量和通过 std::atexit 注册的函数按构造和注册 的顺序逆序析构(因此两者可以穿插进行)。
  3. 关闭所有的 C 文件流。
  4. 移除 std::tempfile

不调用传递给 std::at_quick_exit 的函数。

总结

不同退出方式会调用的函数

相关文章

  • C++ 程序在退出时可能会调用的相关函数

    前言 一个程序可能在 main 函数里中通过 return 0; 退出,也可能在任何函数里调用 std::exit...

  • extern "C"

    extern "C"主要用在c++调用c编写的函数或者相关代码时使用,因为c和c++的函数、变量结构类似,但是编译...

  • 007. From C++ to objective-C

    -表示常规方法,+表示静态方法 指针对象调用函数:当ptr为nil时,OC可以忽略这次调用(C++可能会抛出异常)...

  • c++   inline

    在C中,编译器使用宏定义节省编译时间。在C++中使用内联函数来实现同样的效果。在程序编译时,编译器会将内联函数调用...

  • 找不到工作的人还在学习(c++)

    一、程序设计基础概念 1、在c++程序中调用被c编译器编译后的函数,为什么要加extern “C”? c++语言支...

  • C++多态——虚函数表vtable

    纯Swift类的函数调用原理,类似于C++的虚函数表 纯Swift类的函数调用,类似于C++的虚函数表,是编译时决...

  • 15/4

    异常: 1.调用abort()函数:程序退出 2.使用返回值,当出现异常时返回false,主动终止程序 3.异常机...

  • Fortran与C++交叉编程:Fortran如何调用C++动态

    Fortran程序中调用C++编写的动态库的问题分为两个子问题 Fortran调用c形式函数接口 为c++动态库编...

  • c++入门 - 内联函数、#pragma once

    内联函数 函数的调用 执行到函数调用指令时,程序将在函数在调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(...

  • c++ return 时可能会调用构造函数

    输出结果是13and25而不是预期的14and26是因为ruturn时,c++默认创建了一个A类的临时对象并调用了...

网友评论

      本文标题:C++ 程序在退出时可能会调用的相关函数

      本文链接:https://www.haomeiwen.com/subject/rdkhghtx.html