소멸자
소멸자(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
'C++ 기초 1' 카테고리의 다른 글
[C++] 3-5 프렌드 (friend) 함수 사용 이유 및 예제 (0) | 2023.12.18 |
---|---|
[C++] 3-4 함수에 클래스 객체를 call by reference로 전달 (1) | 2023.12.13 |
[C++] 3-2 클래스 생성자와 포인터 (0) | 2023.12.11 |
[C++] 3-1 클래스 생성자(Constructor) (2) | 2023.12.07 |
[C++] 2-10 클래스 객체 반환 (return) (3) | 2023.12.06 |