Рубрики

C ++ | Обработка исключений | Вопрос 9

#include <iostream>

using namespace std;

  

class Test {

  static int count;

  int id;

public:

  Test() {

    count++;

    id = count;

    cout << "Constructing object number " << id << endl;

    if(id == 4)

       throw 4;

  }

  ~Test() { cout << "Destructing object number " << id << endl; }

};

  

int Test::count = 0;

  

int main() {

  try {

    Test array[5];

  } catch(int i) {

    cout << "Caught " << i << endl;

  }

}

(А)

Constructing object number 1
Constructing object number 2
Constructing object number 3
Constructing object number 4
Destructing object number 1
Destructing object number 2
Destructing object number 3
Destructing object number 4
Caught 4

(В)

Constructing object number 1
Constructing object number 2
Constructing object number 3
Constructing object number 4
Destructing object number 3
Destructing object number 2
Destructing object number 1
Caught 4

(С)

Constructing object number 1
Constructing object number 2
Constructing object number 3
Constructing object number 4
Destructing object number 4
Destructing object number 3
Destructing object number 2
Destructing object number 1
Caught 4

(D)

Constructing object number 1
Constructing object number 2
Constructing object number 3
Constructing object number 4
Destructing object number 1
Destructing object number 2
Destructing object number 3
Caught 4

Ответ: (Б)
Пояснение: деструкторы вызываются в обратном порядке конструкторов. Также после блока try деструкторы вызываются только для полностью построенных объектов.
Тест на этот вопрос

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

C ++ | Обработка исключений | Вопрос 9

0.00 (0%) 0 votes