- 순서
- 포인터란?
- 댕글링 포인터
- void 포인터
- 레퍼런스란?
- 포인터와 레퍼런스의 차이
- 포인터란?
- 메모리 주소를 값으로 저장하는 변수를 포인터라고 함.
- int* a 형식으로 선언하는데 int* a = &b 라고 작성하면 a는 b의 주소를 가리키고 있는 형태이다.
- 포인터는 다른 주소로 재지정 가능하며 없음을 표현할 때 nullptr로 사용함.
- 포인터는 선택적 객체 참조를 표현할 때 유용함.
- 댕글링 포인터
- 포인터가 여전히 해제되어 유효하지 않은 메모리 영역을 가리키고 있을 때 해당 포인터를 댕글링 포인터라고 한다.
- 댕글링 포인터의 문제
- 메모리 접근 시 예측 불가능한 동작
- 메모리 접근 불가 시 Segmentation fault 발생
- 잠재적인 보안 위험
- 예방/대처법
- 스마트 포인터 사용(RAII 원칙)
- delete/free 이후 즉시 nullptr을 대입하며 nullptr 체크
- 지역 변수 주소 반환 대신 값 반환이나 힙/전역 변수 활용
- 컨테이너 재할당 시 포인터 갱신
- 런타임 분석기 사용
- void 포인터
- 어떤 타입의 데이터든 가리킬 수 없는 타입 없는 포인터이다.
- 하지만 타입이 정해진 포인터와 달리, 가리키는 대상의 타입 정보를 모르기 때문에 직접 역참조 하는게 불가함.
- 특징
- 범용 포인터로 어떤 자료형의 주소든 저장 가능함
- 자료형의 크기가 정의되지 않아 포인터 연산 불가능
- 역참조가 불가능함.
- 레퍼런스란?
- 레퍼런스는 이미 존재하는 객채에 대한 별칭으로 선언 시 반드시 초기화 해야하고, 한 번 바인딩되면 다른 객체로 바꿀 수 없음
- 문법적으로는 일반 변수처럼 사용되며, 내부적으로는 포인터처럼 구현될 수 있음.
- 레퍼런스는 null값을 가질 수 없음
- 포인터와 레퍼런스의 차이
| 구분 | 포인터 | 레퍼런스 |
| 초기화 | 나중에 가능 | 반드시 선언과 동시에 초기화 |
| Null 허용 | 가능 | 불가능 |
| 재할당 | 다른 대상 가리킬 수 있음 | 불가능 |
| 연산 | 주소 연산, 산술 가능 | 불가능 |
| 함수 인자 전 | *, & 필요 | 그냥 변수처럼 사용 |
'C++' 카테고리의 다른 글
| [C++] malloc/free와 new/delete (0) | 2025.09.03 |
|---|---|
| [C++]동적할당과 깊은/얕은 복사 (0) | 2025.09.03 |
| [C++]클래스와 구조체 (2) | 2025.09.01 |
| [C++]C와 C++ 언어의 차이점 (1) | 2025.09.01 |
| [C++]전위/후위연산자 (0) | 2025.08.06 |