-
Notifications
You must be signed in to change notification settings - Fork 2
2014 06 13 virtual 소멸자
krikit edited this page Nov 26, 2014
·
1 revision
소멸자의 경우 그냥 무조건 virtual로 선언하는 것이 안전합니다. 아래 코드를 보시죠.
class Parent {
public:
Parent() : prt_mem(new int) {}
~Parent() {
if (prt_mem != std::nullptr) delete prt_mem;
}
private:
int* prt_mem;
};
class Child : public Parent {
public:
Child() : chd_mem(new int) {}
~Child() {
if (chd_mem != std::nullptr) delete chd_mem;
}
private:
int* chd_mem;
};
int main(int argc, char** argv) {
Parent* obj = new Child();
delete obj; // 메모리 누수!
return 0;
}
Parent 포인터에 Child 객체를 동적 할당하고 추후에 그 객체를 소멸하고자 delete를 호출할 경우 virtual로 선언되지 않으면 C++는 정직하게 Parent 클래스의 소멸자만 호출하고 말게되어, Child 클래스에서 동적으로 할당한 메모리는 반환되지 않습니다.