Pointer는 앞서와는 다른 흥미로운 속성들이 있다. 먼저 Pointer가 어떻게 memory 공간에 runtime allocation을 관리하는데 사용할 수 있는지 살펴보자.

 

지금까지 Pointer를 varibale의 주소로 초기화해왔다; variable은 compile time 동안에 할당된 named memory(왜 named memory냐고? variable을 만들 때 이름을 지어주고 그 이름으로 접근하기 때문!). 그리고 각 Pointer는 그저 그 name으로 직접 접근할 수 있는 memory에 대한 alias(별칭)을 제공한다.

 

Pointer의 진정한 가치는 runtime동안 value를 보관할 unnamed memory를 할당할 때 발휘된다. 이 경우에, Pointer는 그 memory에 대한 유일한 접근방식이다.(한 번 정의하면 name이 없기 때문에 찾을 길이 없음!) C에서는 malloc()으로 memory를 할당할 수 있다.

C++에서도 여전히 할 수 있다. C++에서는 더 나은 방법을 제공하는 데 바로 'new' operator이다.

 

 

 

int type에 대한 unnamed runtime storage를 생성하고 pointer로 그 value를 접근해서 new를 시도해보자.

'new'에게 memory가 무슨 data type을 원하는 지 말해줄 수 있다; 'new'는 올바른 크기의 block을 찾아서 그 block의 주소를 반환한다. 이 주소를 Pointer에게 할당한다:

 

int* pn = new int;

 

new int 부분은 프로그램에게 당신이 int를 보관할 적당한 크기의 새로운 storage를 원한다고 말한다. 'new' operator는 type을 얼마나 많은 byte가 필요한 지 알아내는 데 사용한다. 그 다음엔, pn에 주소를 할당한다. pn은 주소 그리고 *pn은 거기에 저장된 value이다.

이번엔 위의 개념과 variable의 주소를 pointer에 할당하는 것과 비교해보자.

 

int higgens;

int* pt = &higgens;

 

두 경우 모두(pn 과 pt), int의 주소를 pointer에 할당한다. 두 번째의 경우, name(higgens)을 통해 int에 접근할 수 있따. 첫 번째의 경우 pointer를 통해서만 오로지 접근할 수 있다. 이것은 이러한 의문을 떠오르게 한다: pn 이 가리키는 memory는 name이 없는데, 이것을 뭐라고 불러야 할까? 우리는 "pn이 'data object'를 가리킨다"라고 말한다. data object는 varaible 보다는 보다 더 일반적인 용어이다. data item에 대해 할당된 모든 memory block을 의미하기 때문이다. 따라서 variable 또한 data object이다. 그치만 pn이 가리키는 memory는 variable은 아니다.

 

data object를 다루기 위한 Pointer 방법은 처음엔 어색해 보일 수 있지만, 프로그램이 memory를 관리하는 방식을 더 좋은 컨트롤을 제공한다.

 

 

 

 single data object에 대한 memory를 얻고 할당하는 일반적인 form은 다음과 같다.

 

typeName * pointer_name = new typeName;

 

fundamental type뿐만 아니라 structure(구조체)도 가능하다.

 

 

Note to jump next. 기본적으로 new는 우리가 사용해온 여느 평범한 variable 정의가 사용하는 것과는 다른 memory block을 사용한다. higgens과 pt는 value들을 stack이라고 불리는 memory region에 저정하는 반면에, new로 할당된 memory는 heap 또는 free store라고 불리는 곳이다. chapter9 에서 더 자세히!