객체 생성시 생성자가 자동 호출되며, 객체 소멸시 소멸자가 자동 호출된다.
여기서 생성자와 소멸자에 대한 몇가지 테스트 결과를 기록하려고한다.
[생성자]
1. 객체 생성시 딱 한번만 호출된다.
-> 이말인 즉슨 여러개의 생성자가 있어도 결국 단 하나의 생성자만 딱 한번만 호출된다.
생성자 역시 함수이기 때문에 오버로딩이 가능하며, 이 중 모양이 같은 생성자만 호출된다.
아래 코드를 보자
아래 코드를 보면 알 수 있듯이 man3에서는 객체 생성시 생성자가 자동 호출되며, 객체 소멸시 소멸자가 자동 호출된다.
여기서 생성자와 소멸자에 대한 몇가지 테스트 결과를 기록하려고한다.
아래 코드를 보면 알 수 있듯이 man3에서는 Person() 생성자가 호출되고(아래 사진과 같이 Person()이 무조건 호출된다면 3번 호출되었어야 함)
man1, man2에서는 오버로딩 되므로 아래 객체는 모양이 같은 Person(const char * myname, int myage) 생성자가 호출된다
#include <iostream>
#include <cstring>
using namespace std;
class Person
{
private:
char * name;
int age;
public:
Person()
{
cout << "하이" << endl;
}
Person(const char * myname, int myage)
{
int len=strlen(myname)+1;
name=new char[len];
strcpy(name, myname);
age=myage;
}
void ShowPersonInfo() const
{
cout<<"이름: "<<name<<endl;
cout<<"나이: "<<age<<endl;
}
~Person()
{
delete []name;
cout<<"called destructor!"<<endl;
}
};
int main(void)
{
Person man3; // Person() 생성자가 호출된다.
/* 오버로딩 되므로 아래 객체는 모양이 같은 Person(const char * myname, int myage) 생성자가 호출된다 */
Person man1("Lee dong woo", 29);
Person man2("Jang dong gun", 41);
man1.ShowPersonInfo();
man2.ShowPersonInfo();
cout << "아하하" << endl;
return 0;
}
자 그럼 그 다음에 볼 것이 소멸자이다.
[소멸자]
1. 객체 소멸과 함께 호출된다.
그렇다면 객체가 소멸되는 시점은 언제일까? 소멸되는 시점은 main 함수가 return 함수로 함수가 소멸되는 시점이 객체가 소멸되는 시점인 것을 알 수 있다.
이는 단순 main 함수 뿐만 아니라 다른 함수들도 포함되는 내용이다.
아래 코드를 보자 코드 실행시 test 함수 소멸과 동시에 소멸자가 호출되어 called destructor! 문장이 출력되는 것을 사진에서 볼 수 있다.
또한 main 종료로 생성된 객체인 man3 객체가 소멸되면서 한번 더 called destructor! 문장이 출력되는 것을 확인 할 수 있다.
이렇 듯 객체의 소멸 시점은 함수가 종료되는 시점이 객체가 소멸되는 시점인 것을 참고하도록하자
텍스트 추가
void test(void)
{
Person man;
}
int main(void)
{
Person man3; // 메인 함수 소멸과 동시에 소멸자가 호출됨
test(); // test 함수 소멸과 동시에 소멸자가 호출됨
return 0;
Person man1("Lee dong woo", 29);
Person man2("Jang dong gun", 41);
man1.ShowPersonInfo();
man2.ShowPersonInfo();
cout << "아하하" << endl;
}