Является ли хорошей практикой инициализация переменной, если ее использование зависит от решающего элемента

#c

#c

Вопрос:

Предположим, что следующий код, в котором у нас есть структура с переменными, и вторая структура, в которой у нас есть функция, в которой мы инициализируем векторы

 int decider1 = //userinput;
int decider2 = //userinput;
struct randomStruct
{
    std::vector<double> foo;
    std::vector<double> foo2;
    std::vector<double> foo3;
};

struct randomStruct2
{ 
   randomStruct foo4;
   void setupArray();
};
  

Теперь у нас есть глобальные переменные, где они будут использоваться только в том случае, если пользователь так решит

 void randomStruct2::setupArray() 
{     
      foo4.foo.resize(1);
      foo4.foo2.resize(1);
      if(decider1 amp;amp; decider2)
      {
         foo4.foo.resize(1);
      }
}
  

Я столкнулся с некоторыми сбоями, когда другой разработчик пытался присвоить значение переменной только в зависимости от того, допустим decider1 , и это был, конечно, пустой вектор.

Теперь мой вопрос с точки зрения разработки: является ли хорошей практикой просто инициализировать вектор независимо от решения пользователя, чтобы избежать дальнейших сбоев в будущем, или я применяю проверку в каждой точке в других файлах .cpp, где я должен проверять оба решающих элемента перед назначением?

Комментарии:

1. Получение немедленной ошибки при записи ошибки (и, следовательно, ошибки) — хорошая вещь в моей книге. Сбои — ваши друзья. Никому не нужно приложение, которое пытается пережить фатальную ошибку и, наконец, умирает где-то в будущем, когда уже слишком поздно получать какую-либо информацию о том, что пошло не так.

2. Белые переменные в этом случае не используются, позже при разработке приложения вы можете забыть об этом и использовать их случайно.

3. Использование статических переменных для (почти) чего угодно часто считается плохой практикой. Разделение создания объекта от инициализации ТАКЖЕ часто считается плохой практикой — лучше подождать, пока не будет доступна вся необходимая информация, а ЗАТЕМ создать объект, передав эту информацию соответствующему конструктору. Конструктор, независимо от того, какую информацию он получает, должен настроить все так, чтобы объект можно было использовать надлежащим образом (т. Е. Настроить соответствующие предварительные условия, которые все открытые функции-члены могут с уверенностью считать истинными).