출저 : 프로그래밍 입문 사이트 ~bituse~ | http://bituse.info/cp/4


이번에는 생성자와 소멸자에 대해 설명합니다. 먼저 생성자에 대해서입니다. 생성자는 클래스를 동적 확보 (인스턴스 생성) 할 때, 

실행되는 함수입니다. 일반 함수와 다른 것으로 하면, 반환 값을 돌려 줄 수 없는 것입니다. 그리고, 함수 이름이 클래스 이름과 동일하게 될 것입니다 

아래의 코드를 봐주세요.



class TEST{
public:
	int figure;
	TEST(int temp){
		figure=temp;
	}
};

int main(void)
{
	//클래스 TEST 포인터를 선언
	TEST *test;

	//new를 사용하여 동적 확보
	test=new TEST(50);

	printf("%d\n",test->figure);
	
	delete test;

	return 0;
}



이렇게 하면 50이 표시됩니다. TEST 함수가 있다고 생각합니다만, 이것이 생성자입니다. 생성자는 무조건 클래스 이름과 동일해야 합니다. 그리고 반환 값을 돌려받지 않기 때문에 반환 장소에는 아무것도 쓰여있지 않지요? 그것 이외엔 일반 함수입니다.


그럼 이제 생성자는 어떻게 실행되는지 살펴보니, new로 동적 할당된 때입니다. 만약 인수를 설정한 경우는 위와 같이 TEST(50)이라고 씁니다. 이제 생성자에 50이라는 값을 전달한다는 의미입니다.


위의 코드는 생성자의 처리에서 전달된 인수를 클래스 내의 figure 변수에 할당시킵니다. 그런 다음 main 함수 내의 printf 함수에서 그 변수에 액세스하여 표시하고 있습니다. 제대로 50으로 표시되어있기 때문에, 생성자가 작동하고 있다는 것을 알 수 있다고 생각합니다.


그런 다음 소멸자에 대해서입니다만, 생성자가 new로 동적 확보되었을 때 실행되고 있던 것에 반해, 반대로 소멸자는 메모리에서 지워졌을 때 실행됩니다.

아래 코드를 봐주세요.



class TEST{
public:
	int figure;
	TEST(int temp){
		figure=temp;
	}
	~TEST(){
		printf("소멸자 실행\n");
	}
};

int main(void)
{
	//클래스 TEST 포인터를 선언
	TEST *test;

	//new를 사용하여 동적 확보
	test=new TEST(50);

	printf("%d\n",test->figure);

	delete test;

	return 0;
}



이렇게 하면 50, 그리고 "소멸자 실행"으로 표시됩니다. 소멸자 작성 방법은, 클래스 이름 앞에 물결표(~)를 붙이는 것 뿐입니다. 생성자 처럼 반환 값을 반환할 수 없으며, 물결표 뒤에 클래스 이름과 동일해야 합니다. 즉, delete 함수가 실행되었을 떄입니다.


생성자는 클래스 내부의 변수 값을 초기화 하는 등, 용도가 상당히 많겠는데, 소멸자는 사용할 수 있는걸까? 라고 생각하는 사람도 많겠다고 생각합니다. 저도 처음에는 사용하지 않았지만, 대규모 프로그램을 짤만한 실력이 된다면, 클래스 내부에서 메모리의 동적 확보를 하게 됩니다. 그때의 삭제 처리를 하기 위해 소멸자를 자주 쓰게 됩니다.


별도로 이 함수는 절대 사용하지 않으면 안 되는 것은 아닙니다. 하지만 기억해두면 편리해서 잘 기억해둡시다.


다음은 클래스의 상속에 대해서 설명합니다.

'공부 > C/C++' 카테고리의 다른 글

(C++) STL에 대해서  (0) 2014.03.27
(C++) string 형식  (0) 2014.03.27
(C++) C++의 문자열 출력에 대해서  (0) 2014.03.26
(C++) 가상 함수  (0) 2014.03.26
(C++) 클래스의 상속  (0) 2014.03.26