본문 바로가기
C++

[C++]Class 소멸자(Destructor)

by Junk_Seo 2018. 1. 25.
반응형

소멸자

소멸자는 class의 생성자와 반대로 객체가 소멸될 때(메모리 해제) 자동으로 호출되는 함수입니다.

형태는 반환형과 함수 인자가 없습니다. 인자가 없으므로 함수 오버로드가 불가능하며 class내에는 단 하나의 소멸자만 존재합니다.

따로 구현하지 않을 경우 default 소멸자가 자동으로 호출되며 기능은 없습니다.

default 소멸자의 형태는 다음과 같습니다.

class C_DATA {
private:
	int m_nData;
public:
	C_DATA();
	~C_DATA();
};
C_DATA::~C_DATA() {
}

함수의 형태는 class 명 앞에 ~ 기호가 붙어 "~<class name>()"의 형태를 가집니다. default 소멸자의 경우 아무 기능이 없기 때문에 함수의 정의는 있지만 안에 내용은 없습니다.

 

소멸자에는 메모리를 해제하는 기능을 구현합니다.

따라서 생성자에서 메모리를 할당하는 작업(동적할당)을 하였다면 소멸자에서 메모리를 해제하는 작업을 합니다.

 

 

소멸자 보단 release 함수 구현

소멸자에서 메모리를 해제하는 작업을 구현할 수 있지만 보통은 release 함수를 따로 구현하여 여기서 메모리를 해제하는 작업을 하는 것이 좋습니다.

왜냐하면 일반 class 객체를 생성하는 경우에 소멸자에서 메모리 해제를 하는 경우 객체가 소멸되기 전 까지는 소멸자를 호출하지 않기 때문에 사용자가 원하는 시기에 메모리를 해제할 수 없습니다. 

 

따라서 생성자에서는 기본적인 초기화 기능을, init 함수에서 메모리 할당, release 함수에서 메모리 해제 기능을 구현하여 사용하는 것이 일반적입니다.

 

만약 사용자가 구현되어 있는 class를 사용할 경우 init 함수와 release 함수가 있는지를 확인하여야 합니다.

있다면 그 기능을 사용하면 됩니다.

만약 이 함수들이 없다면 생성자에서 메모리 할당 / 소멸자에서 메모리 해제 기능이 있는 것이므로 class 객체를 pointer로 선언하여 class 객체를 동적할당의 형태로 사용합니다. 

C_DATA* C1 = nullptr;
C1 = new C_DATA();
...
...
delete C1;

위 코드와 같이 class 객체를 동적할당하여 사용한 뒤 class 객체의 메모리를 해제하면 자동으로 소멸자를 호출하게 됩니다.

반응형

'C++' 카테고리의 다른 글

[C++]Class 상속  (0) 2018.01.30
[C++]Class Operator와 대입연산자  (0) 2018.01.25
[C++]복사 생성자와 delete 키워드  (0) 2018.01.24
[C++]Reference 레퍼런스  (0) 2018.01.24
[C++]Class 생성자(Constructor)  (0) 2018.01.24