알버트의 개발하는 블로그
C 언어 / C++ 언어 제24강 클래스의 생성자와 소멸자 본문
이번 시간에는 클래스의 객체가 생성될때 생성되는 생성자함수와 소멸될 때 소멸되는 소멸자 함수를 배워보겠습니다.
소멸자 함수는 생성자 함수와 다르게 객체가 소멸될 때 실행되는 함수입니다. 따라서 만약 클래스에서 동적으로 할당된 메모리가 있다면 소멸자 함수에서 메모리 해제를 해줄 수 있습니다.
간단한 예제를 통해서 생성자 함수와 소멸자 함수를 익혀보겠습니다.
생성자 소멸자 함수 예제
#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 객체는 메인함수에서 포인터변수명으로 객체가 생성되었기 때문에 메모리 해제는 메인함수에서 해주어야 합니다.
실행해보겠습니다.
대표사진 삭제
사진 설명을 입력하세요.
이렇게 생성자 함수를 통해서 이름과 나이가 정상적으로 초기화되는 것을 알 수 있습니다.
또한 객체가 소멸될 때 소멸자 함수가 자동으로 실행되는 것을 알 수 있습니다.
이처럼 생성자 함수와 소멸자 함수는 클래스를 사용할 때 반드시 익혀둬야 하는 기능입니다.
읽어주셔서 감사합니다~
'프로그래밍 언어 > C & C++' 카테고리의 다른 글
C 언어 / C++ 언어 제26강 다형성 (0) | 2021.04.30 |
---|---|
C 언어 / C++ 언어 제25강 재귀 함수 연습 (팩토리얼, 피보나치 수열, 2진수 변환) (0) | 2021.04.30 |
C 언어 / C++ 언어 제23강 클래스와 상속 (inheritance) (0) | 2021.04.30 |
C 언어 / C++ 언어 제22강 클래스의 static (정적) 멤버 변수 (0) | 2021.04.30 |
C 언어 / C++ 언어 제21강 클래스(class)와 클래스 생성자(constructor) 함수 (0) | 2021.04.30 |