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); |
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
(C언어) 구조체(struct) 정의 (0) | 2016.01.29 |
---|---|
Windows 7에서 MinGW 설치하고 설정하기 (0) | 2015.06.30 |
C/C++ 의 if 문 예제 1 (0) | 2015.06.25 |
C++ 클래스의 정적(static) 멤버 (0) | 2015.06.12 |
C++ 의 구조체(struct) (0) | 2015.06.12 |