이 메모리를 해제하는 코드는 다음과 같다.
delete ip;
하지만 할당과 해제의 이중성에 유의해야 한다. 단일 개체 할당에는 단일 개체 해제가 필요하며 배열 할당에는 배열 해제가 필요하다. 그렇지 않으면 런타임 시스템이 해제를 잘못 처리해 이 시점에서 크래시가 발생할 가능성이 크다. 포인터는 다른 변수를 참조할 수도 있다.
int i = 3; int* ip2 = &i;
& 연산자는 개체를 가져와서 주소를 반환한다. 반대는 * 연산자로 주소를 가져와서 개체를 반환한다.
int j = *ip2;
이를 역참조(Dereferencing)라고 한다. 연산자 우선순위와 문법 규칙이 있다면 역참조 또는 곱셈의 의미를 갖는 * 기호는 적어도 컴파일러가 혼동할 리는 없다.
C++11 초기화하지 않은 포인터에는 (해당 메모리에 설정된 비트가 무엇이든) 무작위 값을 할당한다. 초기화하지 않은 포인터를 사용하면 온갖 종류의 오류가 발생할 수 있다. 포인터가 무언가를 가리키고 있지 않다는 것을 명시적으로 알려주려면, 다음과 같이 설정해야 한다.
int* ip3 = nullptr; // C++11 이상 int* ip4{}; // 이하 동문