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