Автор: oleg_alexeev (19.03.2007 в 11:53)
>> Так что же значит слово virtual?
Это ключевое слово означает, что данная функция вызывается не непосредственно, а через
указатель, который находится внутри объекта. Когда функция Create создает объект типа Derived1
оператором new, то он помещает в объект указатель на ~Derived1 (для Derived2 - соответственно
на ~Derived2). После использования объектов мы их удаляем оператором delete. Он считывает из
объекта указатель на деструктор и вызывает именно тот деструктор, который соответствует типу
объекта (~Derived1 или ~Derived2).
Base *pobj = Base::Create();
pobj->Draw(); // нарисуется нужная фигура (если Draw виртуальная функция)
delete pobj; // здесь вызовется именно нужный деструктор
|
Такой прием программирования называется полиморфизмом (изменение поведения в
производном классе)
>> Вот я знаю, что конструктор инициализирует объект, т.е. дает начальные значения переменным,
>> ну и если объект динамический, то выделяет память под него. А деструктор? Только удалить
>> память и перенаправить указатели в очереди?
Деструктор только освобождает занятые объектом ресурсы, такие как выделенная память (когда
в объекте есть указатели и память выделяется при вызове конструктора или где-то в процессе
работы), дескрипторы файлов, сокетов и т.п.
Если объект входит в какие-либо списки или очереди, то изменение указателей в них - это не
задача деструктора, а задача функции удаления элемента из этой структуры данных.