Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: 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;  // здесь вызовется именно нужный деструктор


Такой прием программирования называется полиморфизмом (изменение поведения в
производном классе)

>> Вот я знаю, что конструктор инициализирует объект, т.е. дает начальные значения переменным,
>> ну и если объект динамический, то выделяет память под него. А деструктор? Только удалить
>> память и перенаправить указатели в очереди?

Деструктор только освобождает занятые объектом ресурсы, такие как выделенная память (когда
в объекте есть указатели и память выделяется при вызове конструктора или где-то в процессе
работы), дескрипторы файлов, сокетов и т.п.

Если объект входит в какие-либо списки или очереди, то изменение указателей в них - это не
задача деструктора, а задача функции удаления элемента из этой структуры данных.


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: