Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 소멸자 다루기

<시간/>

소멸자 클래스의 개체를 삭제하는 작업을 수행하는 C++의 클래스 함수입니다.

소멸자 호출

소멸자는 클래스의 개체가 프로그램의 범위를 벗어날 때 호출됩니다. 개체가 범위를 벗어나는 경우

  • 프로그램이 기능 범위를 벗어났습니다.

  • 프로그램이 종료됩니다.

  • 개체의 지역 변수를 초기화하는 블록이 범위를 벗어났습니다.

  • 개체의 연산자가 삭제된 경우.

예시

코드를 보고 프로그램의 출력을 추측해 보겠습니다.

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<"i = "<<valueInitializer()<<endl;
      return 0;
}

출력

i = 3

먼저 코드를 이해합시다. 여기에서 전역 변수 I을 만든 다음 값 초기화 함수에서 값을 변경했습니다. 여기서는 값 3으로 초기화한 다음 객체 d1을 생성한 다음 값을 반환했습니다.

출력을 맞춰볼까요?

3입니다. 맞히면 박수를 치고 10이라고 생각하면 걱정하지 마십시오. 이제 여기서 무슨 일이 일어났는지 보십시오.

위에서 논의한 바와 같이 소멸자는 호출 함수가 범위를 벗어날 때 호출됩니다. 그리고 범위를 벗어나기 전에 함수는 값 3을 다시 반환했습니다.

예시

지금 이 블록의 출력을 추측해 보십시오.

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int& valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<<"i = "<<valueInitializer()<<endl;
   return 0;
}

출력

비슷한 모양의 코드이지만 이 코드입니다.

인쇄물:i =10 대신.

왜?

여기에서는 값 대신 변수 참조를 반환했습니다. 따라서 소멸자가 호출되면 값이 10으로 변경되고 참조가 전달되면 10이 인쇄됩니다.