본문 바로가기
C++

C++ 소멸자 공부하기 - 클래스와 소멸자

by 여름코딩 2023. 4. 28.
반응형

안녕하세요 판타지코딩입니다!

 

C++은 클래스를 정의하고, 특정 주제와 관련된 변수와 함수를 생성해서 객체를 생성해서 호출할 수 있습니다. 이것은 C++이 객체지향 언어이기 때문에 가지는 특징입니다. 저번 시간까지는 클래스를 생성하고 생성자를 정의해서 멤버 변수의 초기화에 활용하는 방법을 공부했습니다. 이번 시간에는 소멸자에 대해 공부하는 시간을 갖도록 하겠습니다!

 

소멸자

 

1. 소멸자란?

소멸자는 객체가 소멸될 때 호출되는 함수입니다. 객체가 생성될 때는 생성자가 호출되고, 이 때 메모리 공간이 할당됩니다. 그럼 이 할당된 메모리 공간을 다시 해제하는 과정을 거쳐야합니다. 이 과정을 위해서 소멸자를 정의해서 객체를 소멸시킵니다. 그럼 클래스를 정의한 코드를 작성해서 소멸자의 형태를 보겠습니다.

 

class homework{
public:
    int page;
    homework(int p){
        page = p;
        cout << "생성자 호출" << endl;
    }
    ~homework(){
        cout << "소멸자 호출" << endl;
    }
};

 

homework 클래스를 생성했습니다.

 

int형 변수 page는 수행한 숙제의 페이지 수를 저장하기 위해서 생성했습니다.

 

homework(int p)는 int형 변수 p를 인자로 받는 생성자입니다. 멤버변수 page에 p값을 저장하고, 생성자가 호출된 것을 확인하기 위해 cout으로 "생성자 호출" 문자를 출력하도록 했습니다.

 

~homework()는 소멸자입니다. 생성자처럼 클래스 이름을 그대로 활용하는 것을 볼 수 있습니다. 차이점은 코드 앞에 '~'기호를 붙인다는 것입니다. 이것으로 생성자와 소멸자를 구분할 수 있습니다. 소멸자 또한 소멸자 호출을 확인하기 위해 "소멸자 호출" 문자를 출력하도록 했습니다.

 

그럼 이제 메인 함수에서 객체를 생성하여 생성자와 소멸자 호출 순서를 보도록 하겠습니다.

 

 

2. 생성자와 소멸자 호출

 

int main()
{
    homework s(10);
    cout << s.page << endl;
    
    return 0;
}

 

homework 클래스의 객체 s를 생성했습니다. 생성자를 호출하여 인자로 준 10을 멤버 변수 page에 저장합니다.

 

그리고 cout 함수로 s.page의 값을 출력합니다. 코드 실행 결과를 보겠습니다.

 

생성자 호출
10
소멸자 호출

 

객체를 생성할 때 생성자가 호출되므로 "생성자 호출" 문자가 먼저 출력되는 것을 확인할 수 있습니다. 다음으로 cout 함수를 통해 출력한 s.page의 값인 10이 출력됩니다. 그리고 마지막으로 객체가 소멸되면서 소멸자를 호출하기 때문에 "소멸자 호출" 문자를 확인할 수 있습니다.

 

소멸자에 대해서 정리해 보겠습니다.

 

소멸자는 클래스 이름과 동일한 이름을 활용하고, '~'문자를 앞에 붙인다는 차이점이 있습니다. 그리고 생성자는 객체 생성시에 호출된다면, 소멸자는 객체 소멸시에 호출되므로 코드의 마지막에 호출됨을 확인할 수 있습니다.

 

그럼 오늘은 소멸자에 대해서 공부해 보았습니다. 생성자와 소멸자를 정의하고, 호출되는 순서를 이해하셨다면 오늘은 100점입니다!

 

감사합니다!

반응형