티스토리 뷰

Language/C++

[C++] 생성자와 소멸자

Mr.SIM 2013. 10. 5. 23:45

C++에서 클래스를 다루다보면 생성자와 소멸자가 어떻게 이루어저 있으며, 어떻게 호출되는 지 알아야한다.

말그대로, 생성자는 클래스가 생성될때, 소멸자는 메모리를 반환하여 소멸될때 호출되는 함수들이다.


그렇다면, 상속을 받은 클래스의 생성자, 소멸자는 어떻게 호출될까?

#include<iostream>
#include"test.h"
#include"childtest.h"

using std::cout;
using std::endl;

int main(){
	 
	childtest *t = new childtest();
	delete t;

	return 0;
}  



다음과 같은 코드가 있다. childtest는 test라는 클래스를 상속 받도록 해두었다. 물론 두 클래스는 아무런 기능을 하지 않는 생성자, 소멸자만을 호출하기위한 클래스들이다. 

이 코드를 실행해 보면 test생성 -> childtest생성 -> childtest소멸 -> test소멸이라는 순으로 생성자, 소멸자가 호출된다.

 

다음과 같이 생성, 소멸 된다.


하지만, test *t = new childtest();으로 하는 경우는 childtest가 소멸되지 않는다.

test포인터로 참조하지만, childtest로 만들기 때문에, 생성은 둘 다되지만, 소멸은 참조하는 형태인 test만 소멸되어, childtest가 소멸되지못하고 메모리누수(memory leak)가 발생하게된다. 이를 해결하기 위해서는 부모 클래스에 virtual이라는 가상함수를 선언해주면 해결된다.




'Language > C++' 카테고리의 다른 글

[C++] 예외처리  (0) 2013.10.06
[C++] 함수템플릿과 템플릿함수  (0) 2013.10.06
[C++] 멤버 이니셜라이저  (0) 2013.10.05
[C++] namespace  (0) 2013.10.05
[C++] 매개변수의 디폴트 값  (0) 2013.10.05
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday