프로그래밍 언어/C++

소멸자 실행

· 코딩마이데이

Circle 클래스에 소멸자를 추가하고, 소멸자가 실행되면 화면에 메시지를 출력하도록 작성하였습니다.

int main() {
	Circle donut;
	Circle pizza(30);
	return 0;
}

 

main()의 스택에 donut, pizza의 순서로 객체가 생성되며, return 0; 문이 실행되면 반대순으로 pizza, donut 객체가 소멸됩니다. pizza 객체의 ~Circle() 소멸자와 donut 객체의 ~Circle() 소멸자가 각각 순서대로 실행됩니다.

 

Circle 클래스에 소멸자 작성 및 실행

#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;
}

 

실행 결과

반지름 1 원 생성
반지름 30 원 생성
반지름 30 원 소멸
반지름 1 원 소멸

 

생성자/소멸자 실행 순서

함수 내에서 선언된 객체를 지역 객체(local object)라고 바르고 함수 바깥에 선언된 객체를 전역 객체(global object)라고 부릅니다. 다음 코드는 전역 객체와 지역 전체의 사례를 보여줍니다.

class Circle {
	...
}
Circle globalCircle; // 전역 객체
void f() {
	Circle localCircle; // 지역 객체
}

 

지역 객체는 함수가 실행될 때 생성되고 함수가 종료할때 소멸되지만, 전역 객체는 프로그램이 로딩될 때 생성되고 main()이 종료한 뒤 프로그램 메모리가 사라질 때 소멸됩니다. 전역 객체나 지역 객체 모두 생성된 순서의 반대순으로 소멸됩니다

다음 예제는 지역 객체와 전역 객체가 선언되어 있을 때 이들이 생성되고 소멸하는 시점을 보여줍니다.

#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();
}

 

실행 결과

반지름 1000 원 생성
반지름 2000 원 생성
반지름 1 원 생성
반지름 30 원 생성
반지름 100 원 생성
반지름 200 원 생성
반지름 200 원 소멸
반지름 100 원 소멸
반지름 30 원 소멸
반지름 1 원 소멸
반지름 2000 원 소멸
반지름 1000 원 소멸

'프로그래밍 언어 > C++' 카테고리의 다른 글

C++ 구조체  (0) 2026.06.24
접근 지정  (0) 2026.06.21
소멸자란?  (0) 2026.06.15
생성자는 꼭 있어야 하는가?  (0) 2026.06.12
생성자와 멤버 변수의 초기화  (0) 2026.06.09