다형성에 대한 모든 예제에서 기본 클래스의 소멸자는 virtual
이며 빈 몸체로 정의됩니다.기본 클래스 소멸자의 정의는 필요하지 않습니까?
나는이 문제에 대해 내 머리를 터지려고 노력하고있다. 왜 그것은 비어있는 몸이어야 하는가? 메소드가 virtual
으로 선언되었지만 emtpy 본문으로 정의되지 않은 경우 왜 작동하지 않습니까? 그렇다면 기본 소멸자가 구현하지 않겠습니까? 또는 그것이 virtual
으로 선언되고 있다는 사실은 심지어 기본 정의를 강요하고 명시 적으로 본문을 정의하도록 강제합니까?
이 무슨 뜻입니다 :
class A {
public:
virtual void f();
virtual ~A() {}
}
class B : public A {
public:
~B() {
// destroy whatever
}
}
왜 ~A()
단지 정의없이 본 virtual ~A();
과 같이 선언 할 수 없습니다?
또한 추상 클래스에서 (빈 몸체로) 정의해야하는 이유는 무엇입니까? 이 virtual ~A() = 0
과 같은 추상 클래스의 destuctor를 선언하려고 시도했지만 컴파일러가 그렇게하지 못하게했습니다.
여기서 토론을 참조하십시오. 이것은 가상 소멸자 동작에 대한 매우 자세한 설명을 제공합니다. https://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – CoryKramer
@Cyber 저 게시물을 이미 보았습니다. – dabadaba