[英]Calling a virtual function from a destructor of a derived class in c++
這是我的 c++ 代碼片段
class A {
public:
virtual void method() {
cout << "A::method" << endl;
}
virtual ~A() {
cout << "A::destructor" << endl;
}
};
class B : public A {
public:
virtual void method() {
cout << "B::method" << endl;
}
virtual ~B() {
cout << "B::destructor" << endl;
method();
}
};
int _tmain()
{
A* a = new B();
a->method();
delete a;
return 0;
}
我了解到從構造函數或析構函數調用任何虛函數是不可取的。 在派生的 class B 的析構函數中,我調用名為“method()”的虛擬 function。
這是 output 消息。
B::method
B::destructor
B::method
A::destructor
在我看來完全沒有問題。 虛擬 function 知道其 object 類型並打印“B::method()”。 這是一種應該避免的未定義行為嗎?
從概念上講, B
中的所有虛函數都可以在析構函數體中訪問,因此您的代碼很好並且定義良好。
但是您的代碼非常脆弱:如果有一個B
的子 class 的method
被覆蓋,那將是另一回事。 在這種情況下,寫B::method();
在B
的析構函數體中就足夠了。
簡短的回答:最好避免在構造函數和析構函數中調用虛方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.