728x90
반응형
1. 가상 소멸자
#include <iostream>
using namespace std;
class Base {
public:
Base() { cout << "Base()" << endl; }
~Base() { cout << "~Base()" << endl; }
};
class Derived : public Base {
public:
Derived() { cout << "Derived()" << endl; }
~Derived() { cout << "~Derived()" << endl; }
};
int main() {
Base* p = new Derived;
delete p;
}
실행결과
Base()
Derived()
~Base()
===========================================================
Derived 객체를 생성했지만
컴파일러는 p가 Base라고만 생각.
따라서 delete p; 를 보며 p는 Base*이고, 소멸자는 가상함수가 아니다. 라고 생각한다.
virtual ~Base() { cout << "~Base()" << endl; }
//...
virtual ~Derived() { cout << "~Derived()" << endl; }
① 어떤 클래스가 기반 클래스로 사용된다면
=> 소멸자를 반드시 가상함수로 만들어야 한다.
728x90
반응형
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 인터페이스 (interface) (0) | 2019.12.01 |
---|---|
[C++] 추상 클래스 (abstract class) (0) | 2019.11.30 |
[C++] 가상 함수 문법 정리 (0) | 2019.11.28 |
[C++] 가상 함수 (virtual function) (2) | 2019.11.26 |
[C++] upcasting (0) | 2019.11.26 |