더북(TheBook)

이 메모리를 해제하는 코드는 다음과 같다.

delete ip;

하지만 할당과 해제의 이중성에 유의해야 한다. 단일 개체 할당에는 단일 개체 해제가 필요하며 배열 할당에는 배열 해제가 필요하다. 그렇지 않으면 런타임 시스템이 해제를 잘못 처리해 이 시점에서 크래시가 발생할 가능성이 크다. 포인터는 다른 변수를 참조할 수도 있다.

int i = 3;
int* ip2 = &i;

& 연산자는 개체를 가져와서 주소를 반환한다. 반대는 * 연산자로 주소를 가져와서 개체를 반환한다.

int j = *ip2;

이를 역참조(Dereferencing)라고 한다. 연산자 우선순위와 문법 규칙이 있다면 역참조 또는 곱셈의 의미를 갖는 * 기호는 적어도 컴파일러가 혼동할 리는 없다.

C++11 초기화하지 않은 포인터에는 (해당 메모리에 설정된 비트가 무엇이든) 무작위 값을 할당한다. 초기화하지 않은 포인터를 사용하면 온갖 종류의 오류가 발생할 수 있다. 포인터가 무언가를 가리키고 있지 않다는 것을 명시적으로 알려주려면, 다음과 같이 설정해야 한다.

int* ip3 = nullptr;    // C++11 이상
int* ip4{};            // 이하 동문
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.