Ваш массив не является и никогда не может быть "пустым". Он имеет и будет всегда иметь 1000 элементов. Такова природа массивов C ++.
Проблема в том, что эти элементы не находятся в каком-либо детерминированном состоянии, и действительно доступ к любому элементу, который не был инициализирован, является неопределенным поведением .
В более общем смысле объекты в C ++ никогда не могут быть "пустыми". Они всегда существуют. Если бы объект не существовал, не было бы объекта. Некоторые объекты всегда существуют в определенном состоянии, в то время как другие объекты (такие как примитивные типы или именованный объект после std::move
d) могут существовать в неинициализированном или неопределенном состоянии - они все еще существуют, но это единственное, что вы ' присваивают значение для них.