У меня есть класс, который не имеет конструктора по умолчанию или оператора присваивания, поэтому он объявляется и инициализируется внутри оператора if/else в зависимости от результата другой функции. Но потом он говорит, что позже он выходит из сферы действия, хотя оба маршрута условного выражения создадут экземпляр.
Рассмотрим следующий пример (сделанный с помощью int
только для иллюстрации точки):
#include <iostream>
int main()
{
if(1) {
int i = 5;
} else {
int i = 0;
}
std::cout << i << std::endl;
return 0;
}
Переменные, объявленные в условном выражении, выходят за пределы области действия в конце условного выражения? Каков правильный способ обработки ситуации, когда нет конструктора по умолчанию, но аргументы конструктора зависят от определенных условий?
Edit
В свете приведенных ответов ситуация более сложная, поэтому, возможно, этот подход должен измениться. Существует абстрактный базовый класс A и два класса B и C, которые выводятся из A. Как это было бы так:
if(condition) {
B obj(args);
} else {
C obj(args);
}
изменить подход? Поскольку A является абстрактным, я не мог просто объявить A* obj
и создать соответствующий тип с помощью new
.