【问题标题】:destructor c++ make leak memory [duplicate]析构函数c ++使内存泄漏[重复]
【发布时间】:2018-06-12 09:45:21
【问题描述】:

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

所以我有一个带有虚拟析构函数和内联虚拟克隆函数的 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 之前没有使用 virtual,我的输出是

Class A destructor
Class B destructor
Class A destructor

那么谁能解释一下为什么虚拟会有这么大的不同

【问题讨论】:

标签: c++ pointers subclass virtual


【解决方案1】:

When to use virtual destructors?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-28
    • 2012-09-02
    • 2015-08-28
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多