IT/C and C++

C++ 클래스와 동적 메모리 할당

KSI 2005. 6. 30. 04:55
       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할수 없다. 이런 경우 프로그램은 치명적인 에러를 유발한다.