본문 바로가기

Programming/C/C++

C++/소멸자

반응형

소멸자란?


객체가 생성시 생성자가 생성되는 것처럼 객체 소멸 시 소멸자 함수가 반드시 실행된다.


소멸자(destructor)는 객체가 소멸 되는 시점에서 자동으로 호출되는 클래스의 멤버 함수이다.


소멸자의 특징

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

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

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

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

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


소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
using namespace std;
 
class Circle {
public:
    int radius;
    Circle();
    Circle(int r);
    ~Circle();
    double getArea();
 
};
 
Circle::Circle() {
    radius = 1;
    cout << "반지름 " << radius << " 원 생성" << endl;
}
 
Circle::Circle(int r) {
    radius = r;
    cout << "반지름 " << radius << " 원 생성" << endl;
}
 
Circle::~Circle() {
    cout << "반지름 " << radius << " 원 소멸" << endl;
}
 
double Circle::getArea() {
    return 3.14*radius*radius;
}
 
int main() {
    Circle donut;
    Circle pizza(30);
    return 0// 메인 함수 종료시 객체 소멸
}
cs



실행 결과



실행 결과 객체가 생성이되고 생성이된 객체가 메모리에 쌓일때 스택 구조로 쌓이게되는데 먼저 donut 객체가 생성되었고 그 다음 pizza 객체가 생성이 되었다. 여기서 생성된 순서와 반대로 나중에 생성된 pizza가 먼저 소멸되게 되고 그 다음 donut 객체가 소멸된다. 



지역 객체와 전역 객체의 생성 및 소멸 순서


지역객체는 함수안에 선언된 객체를 말하고 전역 객체는 함수 바깥에 선언된 객체를 말한다.

* 지역 객체는 함수가 실행될 때 생성되고 함수가 종료할 때 소멸된다.

* 전역 객체는 프로그램이 로딩될 때 생성되고 프로그램이 종료할 때, main()가 사라져 프로그램 메모리가 사라질 때 소멸된다.


지역 객체와 전역 객체의 생성 및 소멸 순서 소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;
 
class Circle {
public:
    int radius;
    Circle();
    Circle(int r);
    ~Circle();
    double getArea();
};
 
Circle::Circle() {
    radius = 1;
    cout << "반지름 " << radius << " 원 생성" << endl;
}
Circle::Circle(int r) {
    radius = r;
    cout << "반지름 " << radius << " 원 생성" << endl;
}
Circle::~Circle() {
    cout << "반지름 " << radius << " 원 소멸" << endl;
}
double Circle::getArea() {
    return 3.14*radius*radius;
}
 
// 전역 객체 생성
Circle globalDonut(1000);
Circle globalPizza(2000);
 
// 지역 객체 생성
void f() {
    Circle fDonut(100);
    Circle fPizza(200);
}
 
int main() {
    Circle mainDonut;
    Circle mainPizza(30);
    f();
    return 0// 메인 함수 종료시 객체 소멸
}
cs


실행 결과




반응형

'Programming > C/C++' 카테고리의 다른 글

C++/인라인 함수  (0) 2017.10.23
C++/접근지정자  (0) 2017.10.22
C++/예제/클래스/ Rectangle 클래스 만들기  (0) 2017.10.22
C++/컴파일러에 의한 생성자 자동생성  (0) 2017.10.22
C/연산순서에 관한 예시  (0) 2017.09.27