析构函数c ++使泄漏内存

时间:2018-06-12 09:45:22

标签: c++ pointers subclass virtual

我很难弄清楚这个析构函数如何调用

所以我有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

所以任何人都可以解释我为什么虚拟制造如此不同

1 个答案:

答案 0 :(得分:0)

When to use virtual destructors?

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