[모던C++입문] 2.4 소멸자
- 📕 Book/모던C++입문
- 2021. 7. 7.
2.4 소멸자
- 소멸자는 개체를 파괴할 때 마다 호출되는 함수
구현 규칙
- 소멸자에서 예외를 던지지 말라
- noexcept로 암시적 선언되어 C++11이상에서는 항상 실행을 중단하는 런타임 오류로 처리
- 클래스에 virtual 함수가 있으면 소멸자도 virtual이어야 한다
리소스 제대로 처리하기
- 개체가 메모리와 같은 리소스를 할당하는 경우 소멸자가 필요
class vector
{
public:
~vector()
{
delete[] data;
}
private:
unsigned my_size;
double *data;
}
리소스 획득은 초기화
- Resource Acquisition is Initialization (RAII)
- 메모리 누수를 막기위해 모든 예외 발생시 마다 리소스를 해제를 수동으로 해야한다.
- unique_ptr이나 shared_ptr을 통해 메모리 누수를 방지할 수 있다
bool error()
{
return true;
}
void func()
{
int* c = new int[100];
if (error()) return; //error 또는 예외 발생
delete[] c; //해제하지 못한다
}
void func2()
{
std::unique_ptr<int> p(new int(100));
if(error()) return; //예외발생으로 함수를 빠져나가는순간 p는 해제 됨
delete[] p;
}
반응형