Возможный дубликат:
Чистый виртуальный деструктор в 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. По какой-то причине я не могу этого сделать.
В C ++ деструктор может быть чисто виртуальным:
class A{
public:
virtual ~A()=0;
};
Но в каждом случае это нужно реализовать:
inline A::~A() {}
В противном случае класс A непригоден для использования. Я имею в виду уничтожение производного (S / B) невозможно. И возможность уничтожения нужна в этой строке:
B* temp = new B;
потому что в случае сгенерированного исключения — компилятор автоматически уничтожит темп …
Согласно вашему комментарию "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;
}