[C++] 소멸자(Destructor)

SuLee·2021년 8월 23일
0

C++

목록 보기
4/8

📌 소멸자(Destructor)

소멸자(Destructor)는 객체가 소멸할 때 자동으로 호출되는 함수다.

소멸자는 생성자와 마찬가지로 정의할 때 void를 따로 붙여주지 않는다. 또한 소멸자의 이름은 생성자의 이름 앞에 ~만 붙여주면 되고 인수는 따로 없다.

소멸자 예시

#include <iostream>
using namespace std;

class Test {
private:
    char c;
    char* name;
public:
    Test(char ch, const char* t_name) // 생성자
    {
        c = ch;
        name = new char[strlen(t_name) + 1];
        strcpy(name, t_name);
        cout << "Calling Constructor " << c << " " << name << endl;
    }
    ~Test() // 소멸자
    {
        delete[] name;
        cout << "Calling Destructor " << c << endl;
    }
};

void example() { Test b('b', "name is b"); }

int main() {
    Test a('a', "name is a");
    example();
    
    Test* c = new Test('c', "name is c"); // 동적 할당
    delete c;
}

출력

Calling Constructor a name is a
Calling Constructor b name is b
Calling Destructor b
Calling Constructor c name is c
Calling Destructor c
Calling Destructor a

예시와 같이 객체가 소멸될 때 소멸자가 호출되어 실행된다.
example 함수의 지역 객체인 b는 함수가 실행된 후에 소멸되기 때문에 main 함수의 지역 객체인 a보다 먼저 소멸된다. 그리고 이후에 동적으로 할당한 객체 c 또한 main 함수가 끝나기 전에 명시적으로 해제했으므로 a보다 먼저 소멸된다.

클래스 내부에서 동적으로 할당되었을 경우 delete, 배열이 동적으로 할당되었을 경우 delete[]를 소멸자 안에 작성해야 메모리 누수가 일어나지 않는다.

0개의 댓글