C++/클래스

생성자, 소멸자 호출 순서

nowpassion 2008. 5. 5. 13:44

- 상속관계에 있는 클래스간 생성자, 소멸자의 메모리 할당 순서는 결국 스택에 의해 메모리에
  쌓이는 순서에 의해 결정
된다고 볼 수 있다.
- 결국 클래스 생성 단계를 보면 생성자, 소멸자도 알 수 있다.
- 생성자, 소멸자가 자체가 클래스를 생성하고 소멸시키는 일을 하는 것은 아니다.

-생성자 호출 순서
ex) class Line : public Point
1. 클래스 생성을 위한 메모리 생성
2. 상속하는 클래스의 생성자가 우선 호출되어진다. (Point();)
3. 상속받는 클래스의 생성자가 호출된다.(Line();)

-소멸자 호출 순서
1. 상속받는 클래스의 소멸자가 호출된다.(~Line();)
2. 상속하는 클래스의 소멸자가 호출된다(~Point();)
3. 모든 소멸자가 호출된 후 메모리 정리 및 반환을 위한 종료정리작업을 한다.

 ex)/*23.cpp*/
#include <iostream>

using std::endl;
using std::cout;

class Point
{
    int x_ptr;
    int y_ptr;
   
public:
   Point(int _x = 0, int _y = 0){
   cout << "Point() 호출" << endl;
          x_ptr = _x;
          y_ptr = _y;
 }    
    ~Point(){
    cout << "~Point() 호출" << endl;
 }
  
 void getPoint(){
     cout << "X좌표 :" << x_ptr << endl;
     cout << "Y좌표 :" << y_ptr << endl;
    }
};

class Line : public Point
{
    int length;

public:
    Line(int _x = 0, int _y = 0) : Point(_x, _y){
        length = _x + _y;
        cout << "Line() 호출" << endl;
    }
 
 ~Line(){
  cout << "~Line() 호출" << endl;
 }
 
    int getLine(){
        return length; 
       }
};

int main()
{
    Line line(3,8);
    cout << "길이는 " << line.getLine() << endl;
    // system("pause");
    return 0;
}

 - 실행결과