私のクラスは2つあります:
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
このエラーが何なのか全く分かりません... どこかのブログで、これはコンパイラの警告だと読みました。どうすればこの問題を解決できますか?
ベストアンサー1
これは、基本クラスA
に仮想デストラクタがないために発生します。たとえば、次のコードがあったとします。
int main()
{
A* a = new B;
delete a;
}
すると、は仮想ではないため、 のデストラクタdelete a
を呼び出すことはできません。(のリソースがすべてリークされます。)B
A
B
仮想デストラクタの詳細については、こちらをご覧ください。。
基本クラスに仮想デストラクタを追加すれば問題は解決します。
class A
{
public:
virtual void somefunction() = 0;
virtual ~A() = default;
}