наследование — Ошибка программы на C ++ — Виртуальные деструкторы

Возможный дубликат:
Чистый виртуальный деструктор в C ++

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

class B:public A{
int *i;
public:
~B() {delete i;}
};

int main(){
B* temp = new B;
}

Я просто пытаюсь, чтобы B был реализацией A. По какой-то причине я не могу этого сделать.

1

Решение

В C ++ деструктор может быть чисто виртуальным:

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

Но в каждом случае это нужно реализовать:

inline A::~A() {}

В противном случае класс A непригоден для использования. Я имею в виду уничтожение производного (S / B) невозможно. И возможность уничтожения нужна в этой строке:

  B* temp = new B;

потому что в случае сгенерированного исключения — компилятор автоматически уничтожит темп …

3

Другие решения

Согласно вашему комментарию "Yeah i want A to basically be just a container class. Do not want any implementation of A",
Ваш класс B должен protected/private наследуется от А вместо public унаследовать.
virtual ~A() разрешено быть pure но вам все еще нужно обеспечить реализацию ~A(),

class A{
public:
virtual ~A() = 0
{
cout << "~A"<<endl;
}
};

class B : private /*protected*/ A{
int *i;
public:
B() : A(){
i = new int;
}
~B() {
delete i;
}
};

int main(){
B* temp = new B;
delete temp;
return 0;
}
1

По вопросам рекламы [email protected]