我很难弄清楚这个析构函数如何调用
所以我有A类虚拟析构函数和内联虚拟克隆函数
class A{
public:
A(){ }
virtual ~A(){
qDebug() << "Class A destructor";
}
inline virtual A *clone(){
return NULL;
}
};
然后我有子类B也有析构函数和克隆函数返回指向类A的指针
class B : public A{
public:
B() { }
~B(){
qDebug() << "Class B destructor";
}
A *clone(){
B *temp = new B();
return static_cast<A *>(temp);
}
};
我有主要功能和测试功能,我开始做一些关于指针
的疯狂事情A *test(A *input){
return input->clone();
}
int main(){
B temp2;
A *temp = test(&temp2);
delete temp;
return 0;
}
最后,如果我的输出是
Class B destructor
Class A destructor
Class B destructor
Class A destructor
如果我在析构函数类A之前没有使用虚拟,那么我输出的是
Class A destructor
Class B destructor
Class A destructor
所以任何人都可以解释我为什么虚拟制造如此不同