알버트의 개발하는 블로그

C 언어 / C++ 언어 제24강 클래스의 생성자와 소멸자 본문

프로그래밍 언어/C & C++

C 언어 / C++ 언어 제24강 클래스의 생성자와 소멸자

알버트 2021. 4. 30. 09:52

 

이번 시간에는 클래스의 객체가 생성될때 생성되는 생성자함수와 소멸될 때 소멸되는 소멸자 함수를 배워보겠습니다.

소멸자 함수는 생성자 함수와 다르게 객체가 소멸될 때 실행되는 함수입니다. 따라서 만약 클래스에서 동적으로 할당된 메모리가 있다면 소멸자 함수에서 메모리 해제를 해줄 수 있습니다.

 

간단한 예제를 통해서 생성자 함수와 소멸자 함수를 익혀보겠습니다.

 


생성자 소멸자 함수 예제

 

#include <stdio.h>
#include <iostream>
using namespace std;

class Member {
private :		//Member 클래스의 객체들 생성
	char *name;	//포인터로 생성해서 동적 할당
	int age;
public :
	Member(const char *name, int age)
	{
		this->name = new char[strlen(name) + 1];	//메모리 동적 할당해서 name 배열 생성
		strcpy(this->name, name);	//strcpy함수로 입력된 name을 name변수에 저장
		this->age = age;			//입력된 age를 age변수에 저장
	}

	void showing() {	//함수로 name 변수와 age 변수 출력
		cout << "이름 : " << name << ", 나이 : " << age << endl;
	}

	~Member() {		//소멸자함수는 객체가 소멸될 때 실행되는 함수다. 앞에 "~"를 붙인다. 
		cout << "객체가 소멸되었습니다. " << endl;
		delete[] name;	//소멸자 함수는 동적으로 할당된 메모리를 해제시킨다.
	}
};

void main() {

	Member member1("홍길동", 25);	//member1객체 생성
	member1.showing();	//출력
	Member member2("임꺽정", 40);	//member2객체 생성
	member2.showing();	//출력
	Member *member3 = new Member("괴도루팡", 30);	//메모리 동적 할당하여 member3객체 생성
	member3->showing();	//출력
	delete member3;		//동적 할당된 member3객체 해제
}

 

이와 같이 코딩해주었습니다. 클래스 안에서 name을 메모리 동적 할당을 이용해서 입력받습니다.

동적 할당된 메모리는 프로그램이 종료될 때 해제되어야 하므로 소멸자 함수에 delete를 선언해준 것을 알 수 있습니다. 그리고 member3 객체는 메인함수에서 포인터변수명으로 객체가 생성되었기 때문에 메모리 해제는 메인함수에서 해주어야 합니다.

 

실행해보겠습니다.

대표사진 삭제

사진 설명을 입력하세요.

이렇게 생성자 함수를 통해서 이름과 나이가 정상적으로 초기화되는 것을 알 수 있습니다.

또한 객체가 소멸될 때 소멸자 함수가 자동으로 실행되는 것을 알 수 있습니다.

 

이처럼 생성자 함수와 소멸자 함수는 클래스를 사용할 때 반드시 익혀둬야 하는 기능입니다.

읽어주셔서 감사합니다~