2011. 3. 4. 23:56

객체 포인터 배열 : 객체를 가리킬 수 있는 포인터로 구성이 되어 있는 배열

예제(new와 delete를 이용해서 어떻게 객체를 동적으로 생성 및 소멸하는지 알게 될것.)

 #include <iostream>
using std::cout;
using std::cin;
using std::endl;

class Point{
 int x;
 int y;
public :
 Point()
 {
  cout<<"Point() call!"<<endl;
  x=y=0;
 }
 Point(int _x, int _y)
 {
  x=_x;
  y=_y;
 }
 int GetX(){ return x;}
 int GetY(){ return y;}
 void SetX(int _x){ x=_x; }
 void SetY(int _y){ y=_y; }
};

int main()
{
 Point* arr[5];

 for(int i=0; i<5; i++)
 {
  arr[i] = new Point(i*2, i*3); //new에 의한 객체 동적 생성
 }
 for(int j=0; j<5; j++)
 {
  cout<<"x:  "<<arr[j]->GetX()<<' ';
  cout<<"y:  "<<arr[j]->GetY()<<endl;;
 }
 for(int k=0; k<5; k++)
 {
  delete arr[k]; //arr[k]가 가리키는 객체 소멸
 }
}


"new Point(i*2, i*3)"의 의미
:i*2와 i*3을 인자로 받을 수 있는 Point 클래스의 생성자를 호출하면서, Point 객체를 생성하라

=> 힙 영역에 생성. 생성된 객체의 주소 값이 Point*(Point 클래스의 포인터)형으로 반환될 것.

C에서 사용한 malloc 함수를 이용해서 객체 생성을 할 수 있을까? 없다!!
malloc 함수는 함수 호출 시 전달되는 인자만큼 단순히 메모리 공간만 할당하는 함수이기 때문이다. 즉 객체의 크기만큼 메모리 공간을 할당할 수는 있을 지라도, 생성자 호출은 이뤄지지 않는다. C++에서 이야기하는 객체의 조건을 만족시키려면, 생성자 호출은 반드시 이뤄져야 한다.
Posted by Triany