是否有充分的理由不为类声明虚拟析构函数?什么时候应该特别避免写一个?
在某种情况下,派生类是否合法拥有非virtual析构函数?非virtual析构函数表示不应将类用作基类.具有virtual派生类的非析构函数是否会像Java final修饰符的弱形式一样?
我特别感兴趣的是派生类的基类有一个virtual析构函数.
我有两节课:
class A {
public:
virtual void somefunction() = 0;
};
class B : public A {
public:
B();
~B();
void somefunction();
};
B::B() {}
void B::somefunction() {
// some code
}
Run Code Online (Sandbox Code Playgroud)
但是使用g ++我会收到错误:
class A has virtual functions and accessible non-virtual destructor
class B has virtual functions and accessible non-virtual destructor
Run Code Online (Sandbox Code Playgroud)
我不知道这个错误是什么......在博客上的某个地方,我读到这是一个编译器警告.我该如何解决这个问题?
在我的设计期间,有时我会遇到添加/删除虚拟方法的情况.我知道的经验法则是,一旦我有虚拟方法,我将拥有一个虚拟析构函数.
我的问题:如果我在创建类时立即添加虚拟析构函数会有什么危害(所以即使没有虚拟方法)?基本上这个想法不会在以后忘记它.特别是对于n个派生类,我不需要在以后的n个地方更改它.