본문 바로가기

지식창고/프로그래밍

(C++)클래스의 소멸자란?

반응형

바로 다음 글 가지고 왔습니다!!! ㅎㅎ

 

자 클래스의 소멸자란 무엇이냐!!!! 바로!!!

new delete과 같이 생성자와 함께 쓰여야 하는 세트 커맨드라고 보시면 되겠습니다.

생성자가 객체가 생성될 때 호출되는 것에 비해, 소멸자의 경우는 객체가 소멸될 때 호출을 하게 되는데요~

 

여기서 조심하셔야 할 것은 소멸자는 맴버 함수이고, 소멸자의 함수 이름도 생성자처럼 클래스 명을 사용해야 합니다!

 

제 기준으로 차이있고 없고를 말씀드리자면... 흠...

정말 편하게... 소멸자 함수와 생성자 함수의 함수명 앞에 '~' 기호가 있고 없고 차이라고 말씀드리고 싶어요!!! 하...하...

 

자 이번에도 간단한 예제로 생성자가 호출 될 시와 소멸자가 호출 될 시의 차이를 보도록할께요~

 

#include <iostream>

 

using namespace std;

 

class Test

{

private:

                  int num1;

                  int num2;

 

public:

                  Test(int n1 = 1, int n2 = 2);    

                  //디폴트 매개 변수로 인자 값이 전달되지 않았을 

                  //인자 값으로 n1 1 n2 2값으로 초기화.

                  ~Test();                                    

                  //Test생성자의 소멸자

                  void Show_Data() const;       

                  //const 함수 내에서 값의 변동을 막기 위하여.

 

};

 

Test::Test(int n1, int n2)

                  : num1(n1), num2(n2)            

//맴버이니셜라이저를 이용한 초기화.

{

                  cout << "생성자가 호출됨\n";

}

 

Test::~Test()

{

                  cout << "소멸자가 호출됨\n";

}

 

void Test::Show_Data() const

{

                  cout << "num1 : " << num1 << ",  num2 : " << num2 << endl;

}

 

int main(void)

{

                  Test test1(2, 4);

                  Test test2(20, 40);

                  Test test3;                                                   

//디폴트 매개변수로 값을 전달하지 않아도 되기 때문에.

//매개 변수로 인자 값을 전해주지 않았을  출력해보기 위하여.

 

                  test1.Show_Data();

                  test2.Show_Data();

                  test3.Show_Data();

 

                  return 0;

}

와 같이 메시지를 보여주기 전에 3개의 생성자가 생성이 되며, 

출력 후 소멸자에 의해 3개의 소멸자가 생성되었던 함수를 소멸시켜주게 됩니다. 

 

살짝 주석처리를 하여 바꾸어보면 왜 3번이 생성되고 소멸되는 지 차이를 아실 수 있도록!!!

아래에 추가 코드와 첨부 그림을 가져왔기 때문에 금방 이해가 될 것이라고 생각됩니다~!

 

#include <iostream>

 

using namespace std;

 

class Test

{

private:

                  int num1;

                  int num2;

public:

                  Test(int n1 = 1, int n2 = 2);    

                  //디폴트 매개 변수로 인자 값이 전달되지 않았을 

                  //인자 값으로 n1 1 n2 2값으로 초기화.

                  ~Test();                                      

                  //Test생성자의 소멸자

                  void Show_Data() const;       

                  //const 함수 내에서 값의 변동을 막기 위하여.

};

 

Test::Test(int n1, int n2)

                  : num1(n1), num2(n2)            

//맴버이니셜라이저를 이용한 초기화.

{

                  cout << "생성자가 호출됨\n";

}

 

Test::~Test()

{

                  cout << "소멸자가 호출됨\n";

}

 

void Test::Show_Data() const

{

                  cout << "num1 : " << num1 << ",  num2 : " << num2 << endl;

}

 

int main(void)

{

                  Test test1(2, 4);

                  Test test2(20, 40);

//              Test test3;                                                   

//디폴트 매개변수로 값을 전달하지 않아도 되기 때문에 매개 변수로 인자 값을

//전해주지 않았을  출력해보기 위하여.

                  test1.Show_Data();

                  test2.Show_Data();

//               test3.Show_Data();

 

                  return 0;

}

 같이  군데를 주석처리 해주게 되면 결과는 다음 그림과 같이 됩니다~~ ㅎㅎ

 

 

프로그래밍은 어려분 너무 어렵다 어렵다 하지마시고!!!

직접 코딩해보시고!! 따라해보시고 하면서!!! 개념을 잡아가시면서 응용하시면서 실력을 키우시면 됩니다!!!

성급해 하지 않아도되요!!!

(물론... 사람마다 숙달 속도는 다르지만... 아 슬프다... 난 엄청 느렸는데....)

 

제가 올리는 글 말고도 좋은 예시나 소스코드들 설명들이 있기 때문에, 다른 분들은 어떻게 정리를 하셨나 보시면서!!!

 

자신이 이해하기 쉽게 한번!!! 정리해주시는거!! 잊지마시구요~~~ ㅎ

 

자 그럼 다음에 또 다른 커맨드와 함께 찾아올께요~~~

 

씨~~~유~~~

반응형