program_atexit — std::atexit

program_atexit — std::atexit

std::atexit프로그램 정상 종료 시 호출될 함수를 등록해요. <cstdlib> 헤더에 있어요.

등록된 함수들은 정상 종료 시 역순으로 호출돼요 (마지막에 등록된 것이 먼저).

출처: cppreference

본문

// <cstdlib> 헤더
int atexit( /*c-atexit-handler*/ * func ) noexcept;
int atexit( /*atexit-handler*/ * func ) noexcept;

사용 예

#include <cstdlib>
#include <iostream>

void cleanup() { std::cout << "cleanup\n"; }

int main() {
    std::atexit(cleanup);
    // ... 프로그램 실행
    return 0;   // 정상 종료 시 cleanup 호출
}

특징

  • 등록된 함수는 정상 종료(main 반환, std::exit) 시 실행돼요.
  • 역순으로 실행돼요 (마지막 등록이 먼저).
  • 스레드 안전 — 여러 스레드에서 등록 가능.
  • 성공 시 0, 실패 시 0이 아닌 값 반환.
std::atexit(f1);
std::atexit(f2);
// 종료 시 f2 먼저, 그 다음 f1 실행

std::atexit은 프로그램 정상 종료 시 자원 정리 함수를 예약하는 데 사용해요. abort로 종료되면 호출되지 않아요.

더 알아보기 (Learn more)

cppreference