54. C++ 널 포인터 (nullptr
)
1. 개요
1.1 문서 개요
이 문서는 C++에서 어떠한 객체도 가리키지 않는 포인터 상태를 표현하는 nullptr
키워드에 대해 설명합니다. nullptr
는 널 포인터를 보다 명확하게 표현하기 위해 C++11에서 도입되었으며, 포인터 초기화, 비교, 함수 오버로딩 구분 등에 사용됩니다.
2. 내용
2.1 널 포인터의 정의
2.1.1 nullptr
의 의미
널 포인터는 유효한 메모리 주소를 가리키지 않는 포인터를 의미하며, 다음과 같이 선언합니다.
int* p = nullptr;
nullptr
는 어떤 객체도 가리키지 않는 상태를 나타내며, 조건문 등에서 포인터의 유효성을 검사하는 데 사용됩니다.
2.2 nullptr
와 NULL
의 차이
C++11 이전에는 NULL
이 널 포인터를 표현하는 데 사용되었지만, 이는 단순히 0으로 정의된 매크로였습니다. 이에 비해 nullptr
는 nullptr_t
타입을 가지므로 함수 오버로딩 등에서 보다 명확한 타입 구분이 가능합니다.
void func(int);
void func(int*);
func(0); // int 버전 호출
func(nullptr); // int* 버전 호출
2.3 널 포인터 검사
널 포인터는 조건문에서 유효성 확인 시 다음과 같이 검사할 수 있습니다.
if (ptr != nullptr) {
// 유효한 포인터
}
2.4 함수 반환값으로의 활용
널 포인터는 함수가 실패하거나 유효한 객체를 찾지 못했을 때 반환값으로도 사용됩니다.
int* find(int arr[], int size, int target) {
for (int i = 0; i < size; ++i) {
if (arr[i] == target)
return &arr[i];
}
return nullptr; // 찾지 못함
}
3. 마무리
nullptr
는 널 포인터를 명확하게 표현할 수 있도록 C++11에서 도입되었으며, NULL
보다 타입 안정성이 높고 함수 오버로딩 구분에도 유리합니다. 포인터의 유효성 검사 및 초기화 시 널 상태를 표현하는 데 사용됩니다.