스택 메모리
변수의 생존 주기가 끝나면 선언 시 할당되었던 메모리가 자동으로 회수
일반적으로 할당 가능한 스택 메모리듸 크기가 제한적임
메모리 전체 크기 / 힙 > 스택
변수의 스코프를 벗어나면 자동 해제
메모지를 더 길거나 유연하게 관리하기 힘듦
힙 메모리
연산자
동적 할당시 new
해제 시 delete
자동 해제가 되지 않음 => 메모리 누수 위험 O
동적 할당된 객체, 변수의 생존 주기 : 사용자가 delete로 해제할 때까지 유지
int* ptr
new 연산자 사용시 힙 공간에서 내가 요청한 공간만큼 메모리 할당 >> 주소 반환 >> 주소로 반환해주기 때문에 포인터 * 를 사용.
변수일 경우 (int) - new , delete
배열 new [ ] , delete [ ]
스택 - 실행 전 크기를 결정 (메모리 할당)
힙 - 코드 실행 시점에 메모리 할당
Dangling Pointer
해제된 메모리의 주소를 계속 가지고 있는 포인터
Memory Leak (메모리 누수)
메모리 할당 후 해제를 안 하면 계속해서 사용하지 않는 메모리가 쌓임
스마트 포인터
#include <memory>
new / delete 없이 자동 메모리 관리
1. unique_ptr (유니크 포인터)
단일 소유권 관리
단 하나의 포인터만 객체를 소유할 수 있음
소유권 개념만 있어서 복사, 대입 불가능
2. shared_ptr
use_count() 메서드를 활용, 현재 객체를 참조하는 포인터의 개수 확인 가능
reset() 메서드로 소유중인 객체 해제 / 다른 객체로 변경
레퍼런스 키워드 관리
현재 객체를 참조하는 포인터의 개수를 카운팅하는 것
카운트가 0 이 되면 자동으로 메모리 해제
내부적으로 레퍼런스 카운트 관리 => 복사 대입 연산으로 여러 개 포인터가 하나의 객체 공유 가능
3. weak_ptr
객체의 소유권 공유 X
레퍼런스 카운트를 증가시키지 않은 약한 참조 방식
lock() 호출 후 반환된 shared_ptr 에서 내부 객체 유효성 확인 후 사용
shared_ptr 에서 순환참조가 발생하면 순환 고리 중 하나를 weak_ptr 로 대체하여 해결
순환참조: 두 개 이상의 객체가 서로를 shared_ptr 로 가르켜 참조하는 상황
shared_ptr => 관찰, 소유
weak_ptr => 관찰
얕은 복사 / 깊은 복사
일반적으로 포인터나 동적으로 할당된 자원을 관리하는 객체는 메모리 안정성을 위해 '깊은 복사' 를 사용함
얕은 복사
클래스 내의 포인터 멤버를 복사할 때 포인터가 저장하고 있는 주소값만 복사 하는 것
포인터가 가르키는 데이터 X
깊은 복사
클래스의 포인터 멤버가 가르키는 동적 데이터를 새로 할당된 독립적인 메모리 영역에 복제하는 것
언리얼 엔진의 가비지 컬렉션 시스템 / 리플렉션 시스템 - 노션 더 참고하기
함수 오버로딩
Name Mangling (네임 맹글링)
함수 이름 구분을 위해 내부적으로 고유한 이름을 부여하는 것
오버로딩: 동일한 이름의 함수를 여러 개 정의하는 것 => C++에서 가능
C++ => 함수, 이름, 매개변수 타입 정보
오버로딩 성립 조건: 이름이 같아도 각 함수가 명확히 구분되어야함 / 함수의 반환형으로는 성립 X
예시) 매개변수 타입이 다른 경우 / 개수가 다른 경우
함수 오버로딩 순서
컴파일러 - 변환할 수 있는 함수를 최대한으로 찾음
C++ 찾는 순서
1. 정확한 매칭 - 호출 인자 타입 / 매개변수 타입이 정확히 일치하는 경우
2. 타입 승격 전환 - 값이 손실되지 않는 방향으로 변환 하는 것 (승격)
3. 표준 타입 변환 - 값 손실 없이는 승격 불가능 / 손실을 감수하고 변환
4. 사용자 정의 타입 변환
템플릿
타입에 관계 없이 일반화된 코드를 작성하기 위한 문법
template <typename T>
예시) T add (T a, T b);
어떤 타입이 올지는 모르지만 그 타입을 T 로 부름
일반화하려는 타입 자리에 실제 타입 대신 T 를 사용하면 됨 (그냥 일반화 할 것만 정해서 T 로 바꾸기)
템플릿 클래스
클래스도 템플릿으로 사용해 일반화 가능
'게임 개발자를 위한 C++ 문법' 카테고리의 다른 글
| 게임 개발자를 위한 C++ 문법 / 3-1 ~ 3-2 (0) | 2026.05.18 |
|---|---|
| 게임 개발자를 위한 C++ 문법 / 2-4 (0) | 2026.05.15 |
| 게임 개발자를 위한 C++ 문법 / 2-3 (0) | 2026.05.13 |
| 게임 개발자를 위한 C++ 문법 / 1-5 ~ 1-6 (0) | 2026.05.04 |
| 게임 개발자를 위한 C++ 문법 / 1-1 ~ 1-4 (0) | 2026.04.30 |