제3 강 클래스와 동적 메모리 할당
동적 메모리란 실행 시간에 할당되어 사용되는 메모리 블록을 말한다. C에서는 동적 메모리를 heap이라고 하지만 C++에서는 Free Store라고 부른다. c++의 new 연산자는 자신이 할당하는 오브젝트의 데이터형, 즉 클래스를 알고 있을뿐만 아니라 자동적으로 클래스의 생성자를 호출하여 할당된 메모리를 적절한 값으로 초기화 한다.
Mydata *p;
p=new Mydata;
p->DisplayData();
p=new Mydata(600,700);
p->DisplayData();
new는 연산자이므로 매개 변수를 필요로 하지 않는다.또한new 연산자는 메모리를 할당할 오브젝트의 크기와 데이터형을 알고 있으므로 그 데이터형의 포인터를 리턴해 준다. new 연산자를 이용하여 다차원 배열을 동적으로 메모리 할당 할 수 있다. 이때 첫번째 배열 요소를 제외한 모든 배열 요소는 반드시 상수이어야 한다.
Int (*multiArray)[10];
Int length;
Length=10;
MultiArray = new int[length][10]; // 2차원 배열의 메모리 할당
delete 연산자는 new 연산자로 free store에 할당된 메모리 블록을 해제시키고, 해제된 메모리 블록을 free store에 돌려준다. delete 연산자는 메모리를 해제하기전에 자동적으로 그 오브젝트의 소멸자를 호출한다.
delete p;
한번delete한 포인터를 다시 delete할수 없다. 이런 경우 프로그램은 치명적인 에러를 유발한다.