c++ - 类具有虚函数和可访问的非虚析构函数

标签 c++ virtual-destructor

我有两个类(class):

class A {
public:
    virtual void somefunction() = 0;
};

class B : public A {
public:
    B();
    ~B();
    void somefunction();
};

B::B() {}

void B::somefunction() {
    //  some code
}

但是使用 g++ 我得到错误:

class A has virtual functions and accessible non-virtual destructor
class B has virtual functions and accessible non-virtual destructor

我不知道这个错误是什么......我在博客的某个地方读到这是一个编译器警告。我该如何解决这个问题?

最佳答案

这是因为您的基类 A 没有虚拟析构函数。例如,如果您有以下代码:

int main()
{
    A* a = new B;
    delete a;
}

那么 delete a 调用将无法调用 B 的析构函数,因为 A 不是虚拟的。 (它会泄露所有B 的资源。)你可以read more about virtual destructors here .

向你的基类添加一个虚拟析构函数,你应该没问题。

class A
{
public:  
    virtual void somefunction() = 0;
    virtual ~A() = default;
}

关于c++ - 类具有虚函数和可访问的非虚析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5827719/

相关文章:

c++ - 制作不同子类实例的 vector

c++ - 除以零在虚拟析构函数中工作正常

c++ - 获取指向给定成员指针的对象的指针,非标准布局

c++ - 加载库Ex : Parameters get lost in 64bit

c++ - 析构函数和python

c++ - 基础和派生虚拟析构函数的影响

C++:带有成员的抽象类中的纯虚拟析构函数

c++ - 当派生类的析构函数是虚拟的而基类的 dtor 不是时代码崩溃

c++ - 如何访问另一个源文件中 'struct' 的静态成员

c++ - 如何删除相似的引用限定成员函数之间的代码重复?