Всем привет.
Помогите разобраться.
Необходимо удалить объект неизвестного производного класса по его базовому классу.
Вот код задачи:
#include <iostream>
#include <typeinfo>
using namespace std;
class base {
int s;
public:
base() {}
~base() { cout << "Delete Base" << endl << endl; }
virtual int get() { return(s); }
};
class dev : public base {
int k;
public:
dev() {}
~dev() { cout << "Delete Dev" << endl; }
virtual int get() { return(k); }
};
void del(base* el) {
cout << typeid(*el).name() << endl;
delete el;
}
int _tmain(int argc, _TCHAR* argv[])
{
dev* d = new dev;
del(d);
dev* z = new dev;
delete z;
return 0;
}
Dev - производный класс от Base. Если заранее известно что он именно dev, то он удаляется нормально. Если же передать его указатель в функцию как Base, то удаляется только его базовая часть, хотя typeid определяет его правильно.
Вот что выдет программа:
class dev
Delete Base
Delete Dev
Delete Base
|
Как правильно удалить элемент если известен только его базовый класс?
Не писать же каждому производному классу виртуальную функцию удаления...