'실행순서'에 해당되는 글 1건

  1. 2015.05.17 C++의 생성자와 소멸자 실행 순서

 일반 변수와 마찬가지로 어떤 함수 내에서 생성된 인스턴스는 지역 인스턴스, 함수 바깥에 선언된 인스턴스는 전역 인스턴스이다. 전역 인스턴스는 프로그램이 실행될 때 생성되고 프로그램이 종료될 때 소멸된다. 그리고 지역 인스턴스는 함수가 실행될 때 생성되고 함수가 종료될 때 소멸된다.


 다음 예를 가지고 생성자와 소멸자의 실행 순서를 설명하도록 하겠다. 여기에서 rect1 은 함수 바깥에서 생성된 전역 인스턴스이고 rect2, rect3 는 함수 func()의 지역 인스턴스이다.

class Rect {
   .....
};
Rect rect1;
void func() {
   Rect rect2;
   Rect rect3;
   .....
}
int main() {
   .....
   func();
   .....
}

위 예제와 같이 main()함수에서 func() 함수가 호출될 때 rect2, rect3 의 순으로 인스턴스가 생성되며 생성자도 같은 순서로 호출된다. 하지만 func() 함수가 종료될 때는 그 역순으로 소멸되며 소멸자도 역순으로 호출된다.


 전체적인 생성자와 소멸자의 호출순서를 좀 더 자세히 기술하면 다음과 같다.



프로그램 시작

   rect1 객체 생성 (생성자 호출)

   main()함수 실행
       .....

       func()함수 실행
       rect2 객체 생성 (생성자 호출)
       rect3 객체 생성 (생성자 호출)
       .....
       rect3 객체 소멸 (소멸자 호출)
       rect2 객체 소멸 (소멸자 호출)
       func()함수 종료

       .....
   main함수 종료

   rect1 객체 소멸 (소멸자 호출)

프로그램 종료

전역 인스턴스는 전역 변수와 마찬가지로 그 밑에 위치한 모든 함수에서 접근할 수 있는 반변 지역 인스턴스는 포함된 함수 내부에서만 접근할 수 있고 함수의 실행이 끝나면 소멸된다.


C++ 강좌 전체 목록 >>>


c{c++},n{c0022}

Posted by 살레시오
,