Показать сообщение отдельно
Старый 16.11.2008, 00:36   #1
wolfhound512
Знающий
 
Аватар для wolfhound512
 
Регистрация: 18.02.2008
Сообщений: 276
Написано 121 полезных сообщений
(для 299 пользователей)
C++, Наследование, Деструктор

Всем привет.
Помогите разобраться.

Необходимо удалить объект неизвестного производного класса по его базовому классу.

Вот код задачи:
#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(baseel) {
    
cout << typeid(*el).name() << endl;
    
delete el;
}

int _tmain(int argc_TCHARargv[])
{
    
dev= new dev;
    
del(d);

    
dev= new dev;
    
delete z;

    return 
0;

Dev - производный класс от Base. Если заранее известно что он именно dev, то он удаляется нормально. Если же передать его указатель в функцию как Base, то удаляется только его базовая часть, хотя typeid определяет его правильно.
Вот что выдет программа:
class dev
Delete Base

Delete Dev
Delete Base
Как правильно удалить элемент если известен только его базовый класс?
Не писать же каждому производному классу виртуальную функцию удаления...
(Offline)
 
Ответить с цитированием