C++/C++ 기본

소멸자

검정비니 2018. 7. 4. 17:29
728x90
반응형

소멸자



1. 소멸자란?


태어난 모든 생명체가 언젠가는 흙으로 돌아가는 것처럼, C++ 객체 역시 언젠가는 소멸된다. 객체가 소멸되면 객체 메모리는 반환된다. 또한 객체 생성 시 생성자 함수가 실행되는 것처럼 객체 소멸 시 소멸자 함수가 반드시 실행된다. 소멸자(destructor)는 객체가 소멸되는 시점에서 자동으로 호출되는 클래스의 멤버 함수이다.


i.e.

class Circle {

Circle();

Circle(int r);

....

~Circle(); //리턴 타입도 없고 매개 변수도 없다. 소멸자는 한 클래스에 오직 하나만 존재한다!

};


Circle::~Circle() { //소멸자 함수 구현

...

}



소멸자의 특징은 다음과 같다.


- 소멸자의 목적은 객체가 사라질 때 필요한 마무리 작업을 위함이다.


객체가 소멸할 때, 동적으로 할당받은 메모리를 운영체제에게 돌려주거나, 열어 놓은 파일을 저장하고 닫거나, 연결된 네트워크를 해제하는 등 객체가 사라지기 전에 필요한 조치를 하도록 하기 위함이다.


- 소멸자의 이름은 클래스 이름 앞에 ~를 붙인다.


Circle 클래스의 소멸자 이름은 ~Circle()이며, 소멸자는 다음과 같이 작성한다.


Circle::~Circle() { ... }


- 소멸자는 리턴 타입이 없으며 어떤 값도 리턴해서도 안 된다.


소멸자는 생성자와 같이 리턴 타입 없이 선언되며 어떤 값도 리턴해서는 안 된다.


- 소멸자는 오직 한 개만 존재하며 매개 변수를 가지지 않는다.


소멸자는 생성자와 달리 한 클래스에 한 개만 존재하며 매개 변수를 가지지 않는다.


- 소멸자가 선언되어 있지 않으면 기본 소멸자(default destructor)가 자동으로 생성된다.


생성자와 마찬가지로 소멸자가 없는 클래스는 컴파일러에 의해 자동으로 기본 소멸자가 주어진다. 이때 기본 소멸자는 아무 일도 하지 않고 단순 리턴하도록 만들어 진다.




2. 소멸자 실행


다음 예시 코드를 통해서 소멸자의 실행 방법에 대해서 알아보도록 하자.


i.e.

#include <iostream>

using namespace std;


class Circle {

public:

int radius;

Circle();

~Circle(); //소멸자 선언

};


Circle::Circle() {

radius = 1;

}


Circle::~Circle() { //소멸자 구현

cout << "Circle 타입 객체 소멸!" <<endl;

}


int main() {

Circle donut;

} //main 함수가 끝나면서 생성된 객체들에 소멸자가 자동으로 호출이 되면서 생성된 객체들이 소멸된다.



- 생성자/소멸자 실행 순서


함수 내에서 선언된 객체를 지역 객체(local object)라고 부르고 함수 바깥에 선언된 객체를 전역 객체(global object)라고 부른다. 다음 예제는 전역객체와 지역 객체의 사례를 보여준다.


i.e.

class Circle {

...

}

Circle globalCircle; //전역 객체

void f() {

Circle localCircle; //지역 객체

}


지역 객체는 함수가 실ㅊ행될 때 생성되고 함수가 종료할 때 소멸된다. 그에 반해, 전역 객체는 프로그램이 로딩될 때 생성되고 main()이 종료한 뒤 프로그램 메모리가 사라질 때 소멸된다.


전역 객체나 지역 객체 모두 생성된 순서의 반대순으로 소멸된다.

반응형

'C++ > C++ 기본' 카테고리의 다른 글

인라인 함수  (0) 2018.07.07
접근 지정  (0) 2018.07.07
생성자  (0) 2018.07.04
객체 생성과 객체 활용  (0) 2018.07.02
c++ 클래스 만들기  (0) 2018.07.02