小编紀冠瑋*_*紀冠瑋的帖子

虚拟继承中的析构函数

class Base{};
class D1:virtual public Base{};
class D2:virtual public Base{};
class DD:public D1,public D2{};

int main(){
    Base *pBase=new DD;
    delete pBase;
}
Run Code Online (Sandbox Code Playgroud)

这会导致崩溃,但我修改如下:

class Base{
public:
    virtual ~Base(){};
};

class D1:virtual public Base{
public:
    virtual ~D1(){}
};

class D2:virtual public Base{
public:
    virtual ~D2(){}
};

class DD:public D1,public D2{
};
Run Code Online (Sandbox Code Playgroud)

然后,它就通过了,但是默认的析构函数应该是虚拟虚拟函数,不是吗?

c++ destructor virtual-inheritance delete-operator virtual-destructor

2
推荐指数
1
解决办法
2086
查看次数