Namespaces
Variants

std::atexit

cppreference.net에서
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐기됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
Swap 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <cstdlib>
int atexit( /*c-atexit-handler*/* func );
int atexit( /*atexit-handler*/* func );
에 정의됨 (1) (C++11까지)
int atexit( /*c-atexit-handler*/* func ) noexcept;
int atexit( /*atexit-handler*/* func ) noexcept;
(C++11부터)
extern "C" using /*c-atexit-handler*/ = void();
extern "C++" using /*atexit-handler*/ = void();
(2) (설명 전용*)

func가 가리키는 함수를 정상적인 프로그램 종료 시 (std::exit() 또는 main 함수 반환을 통해) 호출하도록 등록합니다.

함수들은 정적 객체의 소멸 중에 역순으로 호출됩니다. A가 B보다 먼저 등록되었다면, A 호출 전에 B 호출이 이루어집니다. 동일한 순서 규칙이 정적 객체 생성자와 atexit 호출 간에도 적용됩니다. std::exit를 참조하십시오.

(C++11까지)

함수들은 정적 저장 기간을 가진 객체들의 소멸 및 서로와 동시에 실행될 수 있으며, A의 등록이 B의 등록보다 시퀀스-이전(sequenced-before) 관계에 있었다면 B의 호출이 A의 호출보다 시퀀스-이전 관계가 되는 것을 보장합니다. 이는 정적 객체 생성자와 atexit 호출 간의 시퀀스 관계에도 동일하게 적용됩니다. std::exit를 참조하십시오.

(C++11부터)

동일한 함수가 여러 번 등록될 수 있습니다.

함수가 예외를 통해 종료되면 std::terminate가 호출됩니다.

atexit은 스레드 안전합니다. 여러 스레드에서 이 함수를 호출해도 데이터 경합이 발생하지 않습니다.

구현은 최소 32개의 함수 등록을 지원함이 보장됩니다. 정확한 제한은 구현에서 정의합니다.

매개변수

func - 정상적인 프로그램 종료 시 호출될 함수에 대한 포인터

반환값

​ 0 ​ 등록이 성공하면 0, 그렇지 않으면 0이 아닌 값입니다.

참고 사항

두 오버로드는 func 매개변수의 타입이 서로 다르기 때문에 구별됩니다 ( language linkage 는 해당 타입의 일부입니다).

예제

#include <cstdlib>
#include <iostream>
void atexit_handler_1()
{
    std::cout << "At exit #1\n";
}
void atexit_handler_2()
{
    std::cout << "At exit #2\n";
}
int main()
{
    const int result_1 = std::atexit(atexit_handler_1);
    const int result_2 = std::atexit(atexit_handler_2);
    if (result_1 || result_2)
    {
        std::cerr << "Registration failed!\n";
        return EXIT_FAILURE;
    }
    std::cout << "Returning from main...\n";
    return EXIT_SUCCESS;
}

출력:

Returning from main...
At exit #2
At exit #1

참고 항목

비정상적인 프로그램 종료를 발생시킵니다 (정리 작업 없이)
(함수)
정리 작업과 함께 정상적인 프로그램 종료를 발생시킵니다
(함수)
(C++11)
완전한 정리 작업 없이 빠른 프로그램 종료를 발생시킵니다
(함수)
std::quick_exit 호출 시 실행될 함수를 등록합니다
(함수)