객체 생성시 생성자가 자동 호출되며, 객체 소멸시 소멸자가 자동 호출된다.

여기서 생성자와 소멸자에 대한 몇가지 테스트 결과를 기록하려고한다.

 

[생성자]

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

 

 

+ Recent posts