반응형
소멸자란?
객체가 생성시 생성자가 생성되는 것처럼 객체 소멸 시 소멸자 함수가 반드시 실행된다.
소멸자(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 |