Назад к задачам
СБЕР ДискПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
5
Определение консольного вывода программы 2
Компании, где спрашивали:
Условие задачи
Найдите все логические и технические ошибки в приведённом фрагменте кода и укажите, какой текст будет напечатан в консоль при его запуске.
# include <deque>
# include <exception>
# include <iostream>
constexpr int x = 2;
struct A {
int* _x;
A() {
_x = new int();
doInitWork();
}
~A() {
std::cout << "~A\n";
delete _x;
}
void doInitWork() {
*_x = x;
afterInit();
std::cout << "A initialized. X = " << *_x << std::endl;
}
virtual void afterInit() { }
};
struct B : A {
int* _multiplier;
B(int multiplier)
: _multiplier { new int { multiplier } } {
if (multiplier >= 3)
throw std::runtime_error("multiplier must be less then 3");
}
~B() {
std::cout << "~B\n";
delete _multiplier;
}
void afterInit() override { *_x *= *_multiplier; }
};
int main(int argc, char* argv[]) {
std::deque<A*> objects;
try {
for (int x = 2; x < 4; ++x) {
objects.push_back(new B { x });
std::cout << "B created with multiplier = " << x << std::endl;
}
} catch (const std::exception& e) {
std::cout << "exception: " << e.what() << std::endl;
}
for (auto&& obj : objects)
delete obj;
return 0;
}