我有两个类(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/