C++ 상속시 소멸자에 virtual?
시작 C++ 상속시 소멸자에 virtual 을 주의깊게 써야한다. 분명히 어디선가 본 글과 코드가 기억납니다. 소멸자에 virtual 을 반드시 써야하는 경우가 있다는 점이 매우 인상적이라 뇌리에 남아있었고, 이 기억때문에 큰 사고(?)를 막은 적도 있어서 정리해두기 위해 글을 남깁니다. 문제 문제를 만들어내는 상황을 설계해보도록 하겠습니다. Class A Class B : A 상속 B 객체 생성 A로 캐스팅 a 소멸 B로 만들었으니 A로 캐스팅해도 B로 소멸? A로 캐스팅하였으니 A로 소멸? 그럼 B가 가진 것들은 어떻게? 물론 5.1 상황이라면 얼마나 편리하겠습니까만 그럴리가 없죠. 그러니 A로 소멸하고 B일때 가진 것들은 반납되지 않는 문제가 발생합니다. 예를 들어 메모리누수라던가 리소스를 반납 안하던가..생각만해도 끔찍하군요. 코드는 다음과 같습니다. class A { public: A() { cout << "Constructor A" << endl; } ~A() { cout << "Destructor A" << endl; } }; class B : A { public: B() { cout << "Constructor B" << endl; } ~B() { cout << "Destructor B" << endl; } }; int main(int argc, char* argv[]) { B* b = new B; A* a = (A*)b; delete a; return 0; } 결과는 다음과 같습니다. $ ./a.out Constructor A Constructor B Destr...