Рубрики

C ++ | Деструкторы | Вопрос 4

#include <iostream>

using namespace std; 

class A

{

    int id;

    static int count;

public:

    A() {

        count++;

        id = count;

        cout << "constructor for id " << id << endl;

    }

    ~A() {

        cout << "destructor for id " << id << endl;

    }

};

   

int A::count = 0;

   

int main() {

    A a[3];

    return 0;

}

(А)

constructor for id 1
constructor for id 2
constructor for id 3
destructor for id 3
destructor for id 2
destructor for id 1

(В)

constructor for id 1
constructor for id 2
constructor for id 3
destructor for id 1
destructor for id 2
destructor for id 3

(С)

Compiler Dependent.

(D)

constructor for id 1
destructor for id 1

Ответ: (А)
Объяснение: В приведенной выше программе id является статической переменной, и она увеличивается с каждым созданием объекта. Объект a [0] создается первым, но объект a [2] уничтожается первым. Объекты всегда уничтожаются в порядке, обратном их созданию. Причина обратного порядка в том, что созданный позже объект может использовать ранее созданный объект. Например, рассмотрим следующий фрагмент кода.

A a;
B b(a);

В приведенном выше коде объект «b» (который создается после «а») может использовать некоторые члены «а» внутри. Таким образом, уничтожение «а» перед «б» может создать проблемы. Следовательно, объект «b» должен быть уничтожен до «a».
Тест на этот вопрос

Рекомендуемые посты:

C ++ | Деструкторы | Вопрос 4

0.00 (0%) 0 votes