54. C++ 널 포인터

54. C++ 널 포인터 (nullptr)

1. 개요

1.1 문서 개요

이 문서는 C++에서 어떠한 객체도 가리키지 않는 포인터 상태를 표현하는 nullptr 키워드에 대해 설명합니다. nullptr는 널 포인터를 보다 명확하게 표현하기 위해 C++11에서 도입되었으며, 포인터 초기화, 비교, 함수 오버로딩 구분 등에 사용됩니다.

2. 내용

2.1 널 포인터의 정의

2.1.1 nullptr의 의미

널 포인터는 유효한 메모리 주소를 가리키지 않는 포인터를 의미하며, 다음과 같이 선언합니다.

int* p = nullptr;

nullptr는 어떤 객체도 가리키지 않는 상태를 나타내며, 조건문 등에서 포인터의 유효성을 검사하는 데 사용됩니다.

2.2 nullptrNULL의 차이

C++11 이전에는 NULL이 널 포인터를 표현하는 데 사용되었지만, 이는 단순히 0으로 정의된 매크로였습니다. 이에 비해 nullptrnullptr_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보다 타입 안정성이 높고 함수 오버로딩 구분에도 유리합니다. 포인터의 유효성 검사 및 초기화 시 널 상태를 표현하는 데 사용됩니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!
위로 스크롤