Несмотря на то, что деструктор B
не является virtual
, я все еще могу вызывать деструктор C
через указатель B
.
Означает ли это, что только единственный внешний абстрактный класс нужен деструктор virtual
?
И если да, то почему он так работает?
Это потому, что B
наследует деструктор A
?
#include <iostream>
struct A {
virtual ~A() {
std::cout << "~A\n";
}
virtual void
function_a() = 0;
};
struct B : A {
/*
virtual ~B() {
std::cout << "~B\n";
}
*/
virtual void
function_b() = 0;
};
struct C : B {
~C() override {
std::cout << "~C\n";
}
void
function_a() override {
std::cout << "function_a\n";
}
void
function_b() override {
std::cout << "function_b\n";
}
};
int
main() {
B * b = new C();
b->function_a();
b->function_b();
delete b;
}