析构函数C++内存泄漏

析构函数C++内存泄漏,c++,pointers,subclass,virtual,C++,Pointers,Subclass,Virtual,我很难弄清楚这个析构函数是怎么调用的 所以我有一个类,带有虚拟析构函数和内联虚拟克隆函数 class A{ public: A(){ } virtual ~A(){ qDebug() << "Class A destructor"; } inline virtual A *clone(){ return NULL; } }; 最后,如果我有输出是 Class B destructor Class A dest

我很难弄清楚这个析构函数是怎么调用的

所以我有一个类,带有虚拟析构函数和内联虚拟克隆函数

class A{
public:
    A(){ }
    virtual ~A(){
        qDebug() << "Class A destructor";
    }

    inline virtual A *clone(){
        return NULL;
    }
};
最后,如果我有输出是

Class B destructor
Class A destructor
Class B destructor
Class A destructor
如果我没有在析构函数类A之前使用virtual,那么输出是

Class A destructor
Class B destructor
Class A destructor
那么,有谁能解释一下为什么虚拟世界如此与众不同


简而言之:没有虚拟函数,就没有vTable,在运行时调用基类之一时,就不可能找到派生析构函数。

这与克隆函数无关。制作一个只包含a*x=新B的主函数;删除x;看看有没有虚拟析构函数会发生什么。删除临时文件;其中,temp的动态类型为B*,而静态类型为A*,非虚拟析构函数为UB。
Class B destructor
Class A destructor
Class B destructor
Class A destructor
Class A destructor
Class B destructor
Class A destructor