-
생성자 함수와 소멸자 함수C++ 언어 2020. 4. 2. 19:04
앞의 포스트를 이해했다면 C++ 에서 나오는 Class 의 개념은 C언어의 구조체와 함수를 묶어놓은 듯한 모양이라는 것을 알 수 있다. 여기서 더 나아가 C++ 에서는 Class 의 생성자와 소멸자 라는 개념의 함수를 지원한다. 생성자 함수에 대해서 살펴보자
생성자 함수란 ?
생성자 함수는 쉽게 말해 Class 의 객체가 생성되면 자동으로 Call 되는 함수를 말한다. 따라서 생성자 함수의 호출 시기는 사용자가 지정할 수 없다. 또한 생성자 함수의 역할은 Class의 멤버에 속한 자료들을 초기화 해주는 역할을 수행한다. 따라서 생성자 함수는 반환값 역시 없다. 아래 예시를 통해 자세히 알아보자
class Test_func { public: // 생성자 함수 // Test_func(){ nData = 50; } // 생성자 함수 // // 해당 Class의 멤버 자료인 nData int nData ; // 해당 Class의 멤버 함수인 test_func void test_func(Test_func* test_p) { std::cout << "Test Functuon : " << test_p->nData << std::endl; } }; int _tmain(int argc, _TCHAR* argv[]){ Test_func test_c; test_c.test_func(&test_c); return 0; }
위와 같이 생성자 함수는 해당 Class와 같은 이름으로 생성하며 생성자 함수는 해당 Class의 객체가 생성될시 자동으로 Call 된다. 따라서 생성자 함수에서 정의한 " nData 변수를 50으로 초기화 " 구문이 실행 되어 만약 Test_func Class의 객체가 생성된다면 nData 멤버는 50으로 초기화 되어 있을 것이다.
위와 같이 디버깅 포인트를 건 뒤 객체 test_c 가 생성되면 실제로 생성자 함수가 호출 되는지 살펴보자
위와 같이 실제로 객체 test_c 를 생성시 Test_func 의 생성자 함수가 호출되며 호출 스택에 올라가는 것을 확인 할 수 있다.
그렇다면 아래 예시에서는 어떤 결과가 나올지 생각해 보자
nData 의 값을 10으로 할당한 상태이다. 위에서 확인한 내용 대로라면 가장먼저 nData 가 10으로 초기화 된 상태에서 객체가 생성 되며 해당 객체 내부의 생성자 함수에 의해 50으로 다시 초기화 될 것이다. 확인해 보자
실제로 객체가 생성됨에 따라 int nData 멤버를 선언하고 10으로 초기화 하는 구문이 실행되는 것을 볼 수 있다 여기서 10이라는 값이 들어간 뒤 어떻게 되는지 살펴보자
위와 같이 멤버 생성이 끝나고 난 뒤 생성자 함수가 Call 되며 멤버의 값을 50으로 초기화 하는 것을 볼수 있다. 이와같이 생성자함수는 자신이 속한 Class의 객체가 생성되면 해당 객체는 가장 먼저 생성자 함수를 호출해 제작자가 의도한 방향으로 멤버값을 초기화 시켜준다.
'C++ 언어' 카테고리의 다른 글
복사생성자 (0) 2020.04.06 Class 멤버 함수의 선언 및 정의 분리 (0) 2020.04.02 Class의 생성 과정 (0) 2020.03.31 함수 템플릿과 인라인 함수 (0) 2020.03.30 참조자의 내부 동작 (0) 2020.03.27