Мы готовы к анализу контекста явного вызова деструктора. Ранее, в разделе, посвящённом деструкторам, упоминалось, что явный вызов деструктора требует операций обращения. Рассмотрим следующий пример.
На основе символа операции '~' может быть определена операторная функция. Нам сейчас абсолютно безразлично её назначение и устройство. Мы определим её лишь в самых общих чертах.
ComplexType ComplexType::operator ~ () { cout << "Это ComplexType ComplexType::operator ~ ()" << endl; return ComplexType(); }
Кроме того, предположим существование ещё одной функции-члена класса ComplexType, в теле которой и расположим интересующие нас выражения и операторы.
void ComplexType::xFun() { ::::: ComplexType CTw = ComplexType(); /* В результате выполнения выражения преобразования типа вызывается конструктор умолчания, который создаёт временный объект, значение которого копируется в переменную CTw. */ ~CTw; CTw.operator ~(); /* Сокращённая и полная формы вызова операторной функции ComplexType ComplexType::operator ~ () */ ~ComplexType(); /* Создаётся временный безымянный объект, для которого вызывается операторная функция ComplexType ComplexType::operator ~ (). Используется сокращённая форма вызова. */ ComplexType().operator ~(); /* Создаётся временный безымянный объект, для которого вызывается операторная функция ComplexType ComplexType::operator ~ (). Используется полная форма вызова. */ CTw.~ComplexType(); /*Наконец, явный вызов деструктора для объекта CTw */ this->~ComplexType(); /* Явный вызов деструктора для объекта, расположенного по адресу *this */ ::::: }
Назад | Содержание | Вперед