TIL: C와 C++의 동적할당 차이

박춘팔·2026년 4월 20일

CPP TIL

목록 보기
10/15

📅 2026-04-20

캠프에서 C언어 완전 기초.. 부터 수업을 하길래 생각난 김에 차이에 대해서 공부해보려고 하다가
동적할당이라는 주제를 선택했다.

핵심적인 차이점

C

단순 메모리 확보/해제

C++

객체의 생성/소멸까지 포함된 메모리 관리

문법

C

int* arr = (int*)malloc(sizeof(int) * 10);
free(arr);

C++

int* arr = new int[10];
delete[] arr;

생성자 / 소멸자 호출 여부

C

생성자/소멸자 없이 메모리 덩어리

C++

class A
{
	A() { printf("생성"); }
    ~A() { printf("소멸"); }
}

A* a = new A();
delete a;

타입 안정성

C

void* ptr = malloc(sizeof(int));
int* iptr = (int*)ptr; // 캐스팅 필요
  • 타입정보 X
  • 캐스팅 실수해도 컴파일에러X

C++

int* ptr = new int;
  • 타입 자동 추론
  • 캐스팅 필요없음
  • 컴파일 시 타입체크

초기화

C

int* a = (int*)malloc(sizeof(int)); // 더미값

C++

int* a = new int(); // 0 초기화
int* b = new int(10); // 값 지정 가능

배열처리

C

int* arr = (int*)malloc(sizeof(int) * 10);
free(arr);

C++

int* arr = new int[10];
delete[] arr;

실패처리

C

if (ptr == NULL) { ... }

C++

int* ptr = new int; // 실패시 예외 발생

설계관점

C

  • 단순 구조체 + 메모리
  • 사람이 직접 관리
  • 휴먼에러 확률 높음

C++

  • 객체중심
  • 생성/소멸 자동 관리 (stl)
  • RAII 패턴 사용

RAII란?

메모리 자동 해제까지 염두하는 설계법

class string
{
public:
    char* c = nullptr;

    string(size_t len)
    {
        c = new char[len];
    }

    ~string()
    {
        delete[] c;
    }
};

string s(100);
strcpy(s.c, "Hello, world!");
throw 0;

// 출처 : https://m.blog.naver.com/kmc7468/220927032462

std::shared_ptr, std::unique_ptr 등 모두 RAII 패턴으로 작성됨

따라서

모던C++에서는 STL 사용하는게 정석

그럼에도 C++에서 직접 메모리 관리를 하는 경우

C 라이브러리와 연동 시

C API는 malloc/free로 작성되어 있어서

매우매우 로우레벨 메모리 제어 시(게임/엔진/시스템)

  • 메모리 풀
  • 커스텀 allocator
  • 성능 튜닝
profile
이것 저것 다해보는 삶

0개의 댓글