[英]Abstract classes, inheritance and virtual destructors
即使B
的析構函數不是virtual
,我仍然可以通過B
指針調用C
的析構函數。
這是否意味着只有最外層的抽象類需要有一個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;
}
B
和C
的析構函數也是virtual
。 析構函數不會被繼承,但如果基類的析構函數是virtual
,則派生的析構函數會覆蓋它並且也是virtual
; 盡管顯式指定了virtual
。
即使析構函數沒有被繼承,如果基類聲明它的析構函數
virtual
,派生的析構函數總是覆蓋它。
和
那么這個 Derived 類中的函數也是
virtual
(無論其聲明中是否使用關鍵字virtual
)並覆蓋Base::vf
(無論其聲明中是否使用單詞override
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.