모던 C++와 C 대안

RAII와 결정적 cleanup

RAII는 exception을 포함한 모든 scope 종료에서 자동 cleanup합니다.

RAII와 결정적 cleanup이란?

RAII는 exception을 포함한 모든 scope 종료에서 자동 cleanup합니다.

Resource lifetime을 object lifetime에 연결합니다.

중요한 점

  • 먼저 C 메커니즘을 이해하세요.
  • RAII와 value semantics로 ownership을 표현하세요.
  • Macro와 cast보다 type-safe 추상화를 사용하세요.

C와 C++ 코드 예제

C
실행 →
main.c
#include <stdio.h>

int main(void) {
    int result = 1;
    FILE *file = fopen("scores.txt", "w");
    if (!file) goto cleanup;
    if (fputs("Ada 95\n", file) < 0) goto cleanup;
    result = 0;

cleanup:
    if (file) fclose(file);
    puts(result ? "failed" : "saved");
    return result;
}
예상 출력
saved
C++
실행 →
main.cpp
#include <fstream>
#include <iostream>

int main() {
    std::ofstream file("scores.txt");
    if (!file) return 1;
    file << "Ada 95\n";
    std::cout << "saved\n";
}
예상 출력
saved

C와 C++ 비교

C는 cleanup label로 모든 path에서 fclose합니다. C++ fstream은 destructor에서 닫아 ownership을 지역화합니다.

C

C는 prefix, callback, macro와 context 구조를 씁니다.

C++

언어 기능이 scope와 type safety를 갖춘 추상화를 제공합니다.

연습 문제

두 버전을 실행하고 수정하여 각 언어의 보장을 관찰하세요.

  • C 메커니즘을 먼저 작성하세요.
  • 수동 cleanup을 RAII로 바꾸세요.
  • Allocation과 virtual dispatch를 확인하세요.