티스토리 뷰
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