Tại sao tất cả các trình phá hủy, ~D()
, ~C()
, ~B()
, ~A()
được gọi trong ví dụ bên dưới?Tại sao destructor lớp cơ sở được gọi là đối tượng dẫn xuất khi destructor của lớp dẫn xuất là không ảo?
Chỉ có một trình phá hủy ảo: số của A
.
Đây là mã:
#include<iostream>
using namespace std;
class A
{
public:
virtual ~A()
{
cout<<"destruct A\n";
}
};
class B:public A
{
public:
~B()
{
cout<<"destruct B\n";
}
};
class C:public B
{
public:
~C()
{
cout<<"destruct C\n";
}
};
class D:public C
{
public:
~D()
{
cout<<"destruct D\n";
}
};
int main()
{
A* ptr = new D();
delete ptr;
return 0;
}
Vì đó là những gì các quy tắc của ngôn ngữ nói sẽ xảy ra. – juanchopanza