'소멸자'에 해당되는 글 2건

  1. 2015.05.17 C++의 생성자와 소멸자 실행 순서
  2. 2015.05.17 C++ 클래스의 소멸자(destructor)

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


 다음 예를 가지고 생성자와 소멸자의 실행 순서를 설명하도록 하겠다. 여기에서 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 살레시오
,

 소멸자(destructor)는 생성자와는 반대로 인스턴스가 소멸될 때 반드시 호출되는 멤버 함수이다. 소멸자는 객체가 삭제되는 시점에서 필요한 마무리 작업을 처리하기 위해서 있는 것이다. 예를 들어서 동적으로 할당받은 메모리를 반환하거나 열어 놓은 파일을 닫거나 시리얼 등의 통신 연결을 끊거나 하는 마무리 작업을 수행해야 하는 경우 소멸자를 구현해야 한다.


 소멸자의 이름은 클래스이름 앞에 틸다(~)를 붙인다. 예를 들어서 Rect 클래스의 소멸자 이름은 ~Rect() 이다.


class Rect { // 클래스 선언
   public:
       Rect(); // 생성자
       ~Rect(); // 소멸자
   .....
};

Rect::~Rect() { // 소멸자 구현
   .....
}

 생성자와 마찬가지로 소멸자도 반환값이 없으며 함수 내부에서 어떤 값을 반환해서도 안된다. 또한 생성자를 오버로딩할 수 있으나 (즉,  입력 인자가 다른 생성자가 여러 개 있을 수 있다) 소멸자는 입력 인수가 없는 기본형 하나밖에 없다.


 생성자와 마찬가지로 사용자가 소멸자를 선언하지 않은 경우에는 컴파일러가 자동으로 기본 소멸자(default destructor)를 생성하여 인스턴스 소멸시에 자동으로 호출되도록 한다. 이 기본 소멸자는 아무 일도 하지 않고 단순히 리턴하도록 만들어진다.


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


c{c++},n{c0021}

Posted by 살레시오
,