Моя программа успешно компилируется, но я не уверен, что это может
приводить к ошибке во время выполнения при определенных обстоятельствах.
Это безопасно сделать; хранилище для переменной vec
будет выделено статически, и ее конструктор по умолчанию будет вызываться в какой-то момент (именно тогда, когда в контексте всей вашей программы строго не определено, поскольку порядок инициализации между единицами перевода не является строго определенным).
и компилятор может зарезервировать ограниченный объем памяти, для которого это
вектор может расширяться. При достижении этого предела то, что пишется, может
есть в памяти, используемой другой переменной.
Вектор сам распределяет свое хранилище в куче, поэтому на его расширение не будет наложено никаких ограничений, которые были бы другими, если бы вы создали экземпляр вектора как локальную переменную: в основном вы будете ограничены объемом памяти Вы можете непрерывно распределять в моменты времени, когда вектор должен перераспределить свое внутреннее хранилище.
Все это говорит, что хотя это безопасно, это не обязательно хорошая практика; он попадает в область любой другой глобальной переменной или глобально доступного бита хранилища, что может быть предметом спора. Как правило, я бы посоветовал избегать глобальных переменных, как правило. Хотя в некоторых случаях это может быть приемлемо, глобальный доступ противоречит вашей способности контролировать доступ к переменной и применять к ней инварианты, а также состояние, которое они контролируют или подразумевают. Это может привести к сложностям в обслуживании систем в масштабах кодовой базы, поскольку эти пути доступа четко не прописаны.