Функциональные возможности деструктора

0

Для простого класса:

class X {
public:
//...
private:
int *ptr;
};

X::~X() {
delete ptr;
}

Я написал деструктор, чтобы освободить память, на которую указывает ptr. Теперь я задаюсь вопросом, если мой деструктор остается, как это, когда ptr фактически уничтожены?

благодаря

  • 0
    Когда деструктор называется, на первом месте?
  • 0
    он уничтожается, когда экземпляр X , содержащий ptr , уничтожается сам.
Показать ещё 7 комментариев
Теги:
destructor

4 ответа

1
Лучший ответ

delete вызывает деструктор объекта, который удаляется, а затем освобождает занятую память.

2

Я думаю, что эта статья может ответить на большинство ваших вопросов

"Деструкторы неявно называются, когда автоматический объект (локальный объект, который был объявлен автоматически или зарегистрирован или не объявлен как статический или внешний) или временный объект, выходит из области действия. Они неявно вызываются при завершении программы для построенных внешних и статических объектов Деструкторы вызывается, когда вы используете оператор delete для объектов, созданных с помощью нового оператора. "

Более конкретно:

"Деструкторы базовых классов и членов вызываются в обратном порядке завершения их конструктора:

Деструктор для объекта класса вызывается перед вызовом деструкторов для членов и баз.

Деструкторы для нестатических членов вызываются перед вызовом деструкторов для базовых классов.

Деструкторы для невиртуальных базовых классов вызывается перед вызовом деструкторов для виртуальных базовых классов. "

1

Деструктор вызовет в конце области действия, где находится конкретный экземпляр.

  • 0
    Это неполно Деструкторы также вызываются при использовании delete .
  • 0
    delete динамический экземпляр? это своего рода «конец области видимости» ... tnx для вашей коррекции!
0

Локальная версия ptr для данного экземпляра X будет уничтожена, когда объект выходит за рамки. Например:

int main()
{
    X obj;

    for (int i=0; i<10; i++) {
        X tmp;

        // do work with tmp
        ...

        // tmp goes out of scope here
        // the destructor tmp::~X will be called here, immediately after each iteration ends
    }

    // obj goes out of scope here
    // the destructor obj::~X called when the program ends
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню