При выполнение данного кода произошло создание трех объектов.
Если происходит создание одного или двух - я могу понять логику.
А при трех представить последовательность не получается.
1 объект: throw
просто переводит выполнение на строку за подходящую catch
-метку.
2 объекта: для объекта-операнда оператора throw
создается копия, затем вызывается деструктор для obj
, выполнение переходит на подходящую метку catch
, выполняется тело метки, для копии вызывается деструктор.
class A
{
public:
A(){ cout << "Constructor A" << endl;};
A(const A &obj){ cout << "Copy A" << endl;};
A& operator=(const A & obj){cout << "Assigment A" << endl; return *this;};
~A(){cout << "Destructor A" << endl;};
};
int main(void)
{
try
{
A obj;
throw obj;
}
catch(A object)
{
cout << "Hello!!!" << endl;
}
return 0;
}
Вывод программы:
Constructor A
Copy A
Destructor A
Copy A
Hello!!!
Destructor A
Destructor A
Все верно - создание копии для "бросания", уничтожение объекта в try
-блоке, далее, поскольку вы передаете исключение в catch
по значению, а не по ссылке - еже одно копирование. И под конец удаление обоих оставшихся объектов.
Напишите
catch(A& object)
и объектов будет только два.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
После сортировки в массиве NxN появляется мусор, с каждым разом мусор в разных местах
Столкнулся с проблемой, которая заключается в кривом отображении блока с текстом
Имеются 4 блокаУ каждого из них идентичный код, который приведен ниже
Подскажите, можно ли только с помощью одного css сделать следующее