본문 바로가기

C++ 기초 1

[C++] 3-3 소멸자 (Destructor) 설명 및 예제

소멸자

   소멸자(Destructor) 함수는 클래스 사용이 종료될때 자동으로 호출되어 수행되는 멤버 함수이다. 소멸자 함수는 클래스의 이름과 같은 이름을 가지며 앞에 틸드 기호(~)를 붙여 사용한다. 생성자와 마찬가지로 소멸자도 반드시 클래스 내에 public멤버로 지정되어야 한다. 그리고 return 값이 없으므로 함수형이 void이지만 이를 생략하여 사용한다.

   소멸자 함수는 인수를 전달할 수 없으므로 오버로드가 불가능하다. 소멸자 함수는 주로 생성자 함수에 의해 할당된 동적 메모리를 클래스 종료와 함께 자동으로 동적 메모리 영역을 해제하고자 사용된다. 아래 예제에서 자세히 확인할 수 있다. 

 

 
예제
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>				//물자열 처리 헤더 파일
using namespace std;
class score {
private:
	char* name;
	int kor;
	int eng;
	double ave;
public:
	score(char* n, int k, int e);	//생성자 함수 선언
	~score();						//소멸자 함수 선언
	void sum_ave();
	void output();
};
score::score(char* n, int k, int e)	//생성자 함수 정의
{
	cout << "생성자를 수행합니다." << endl;
	name = new char[strlen(n) + 1];	//동적 메모리 할당
	strcpy(name, n);				//문자열의 복사
	kor = k;
	eng = e;
}
score::~score()		//소멸자 함수 정의
{
	cout << "소멸자를 수행하였습니다." << endl;
	delete name;	//동적 메모리 영역 해제
}
void score::sum_ave()
{
	ave = double(kor + eng) / 2.0;
}
void score::output()
{
	cout << "name=" << name << endl;
	cout << "kor=" << kor << endl;
	cout << "eng=" << eng << endl;
	cout << "ave=" << ave << endl;
}

int main()
{
	score x((char*)"Cho", 90, 85);
	x.sum_ave();
	x.output();
	return 0;		//소멸자 함수 자동 호출
}
실행 결과
생성자를 수행합니다.
name=Cho
kor=90
eng=85
ave=87.5
소멸자를 수행하였습니다.

※ 일반적으로 소멸자는 object 선언 시 생성자 함수에 의해 할당된 동적 메모리를 객체 소멸과 함께 자동으로 해제시키고자 할 때 사용한다. 
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13