Поэтому для класса, который я беру, мы практикуем перегруженные операторы, но более конкретно мы разрабатываем класс для фракций (рациональные числа). Я играю с блоками try-catch и не могу заставить его работать так, как я хочу, и не могу найти какие-либо форумы или статьи о том, что я не могу понять. Я пытаюсь создать объект рационального числа в блоке try-catch, чтобы убедиться, что значение, помещаемое в знаменатель, не является "0", и если это так, я позволяю блоку catch вызвать деконструктор для объекта. У меня этот бит работает нормально, но кажется, что мне не удастся использовать объект, созданный в блоке try-catch позже в коде, даже если конструктору удалось присвоить знаменателю ненулевое значение, Есть ли способ объявить объект в блоке try-catch, чтобы убедиться, что он не будет генерировать исключение при его создании, но все еще имеет его в рамках остальной части кода, который находится за пределами блока try-catch, но все еще находится в такая же функция или нет способа ее снять?
try
ввести новую область. Вы не можете использовать ваши успешно созданные объекты вне try
потому что они вышли из сферы действия и были уничтожены. Это справедливо для объектов, созданных в любом блоке, например, for
или if
, или любого набора { }
фигурных скобок. То, что вы хотите сделать, - это переместить код, который зависит от объекта, в try
.
Например:
try {
Rat rat1(3, 1);
Rat rat2(2, 4);
Rat rat3 = rat1 + rat2;
std::cout << rat3 << std::endl;
}
catch (std::exception& e) {
// above should not throw
}
try {
Rat rat1(3, 1);
Rat rat2(2, 0); // throws
Rat rat3 = rat1 + rat2;
std::cout << rat3 << std::endl;
}
catch (std::exception& e) {
// code here will execute
}