C++ 에서 동적으로 메모리를 생성하고 반환하는 명령은 new와 delete인데 이것을이용하면 객체의 배열도 동적으로 생성하고 반환할 수 있다. new를 이용하여 Rect 라는 클래스 객체의 배열을 동적으로 생성하는 구문은 다음과 같다.


Rect *pRect = new Rect[3];


이렇게 하면 연속된 세 개의 Rect 객체가 생성되는데 이 때 각 객체에 대해 기본 생성자 Rect() 가 호출된다. 이렇게 생성된 객체 배열은 보통의 배열처럼 사용된다.


pRect[0].setWidth(11);

(pRect+1)->setWidth(21); //포인터의 멤버 함수 호출 시 -> 사용

pRect[2].setWidth(33);


이렇게 할당 받은 배열의 메모리를 반환하는 형식은 다음과 같다.


delete [] pRect;


delete 명령과 pRect 포인터 이름 사이의 [] 를 빠뜨리면 안 된다. 이렇게 하면 세 개의 Rect 객체가 소멸되는데 이 때 각 객체의 소멸자가 호출된다.


 한 가지 주의할 점은 new를 이용하여 동적으로 객체 배열을 생성할 때, 매개 변수가 있는 생성자를 호출할 수 없다는 점이다. 만약 어떤 객체를 배열로 생성하여 사용할 경우 이 점을 염두에 두고 생성자와 멤버 함수를 설계해야 한다.


class Rect {
public :
   ….
   Rect();
   Rect(double width, double height); //(2)
   ….
};


위의 예에서 두 번째 생성자 (2)는 배열을 생성하면서 동시에 호출할 수 없다. 따라서 다음과 같이 분리해 놓고


class Rect {
public :
   ….
   Rect();
   void set(double width, double height);
   ….
};


객체 배열 생성 후 반복문으로 순차적으로 set()함수를 호출하는 방법을 사용해야 한다.


Rect *pRect = new Rect[100];
for (int k=0; k<100; k++)
   pRect[k].set(11,22);




Posted by 살레시오
,