Я думаю, что есть некоторая концепция, которую вам нужно понять.
В отличие от Java, когда вы создаете N-элементный массив User, он НЕ является массивом ссылок.Это действительно часть памяти, содержащая фактического пользователя N, который уже создан и инициализирован (т.е. конструктор уже запущен).(Ну, есть более сложные темы, такие как размещение новых, но я думаю, что это еще не совсем то, что вы ищете)
Так что это как-то противоречит, если вы сказали, что у вас есть "массив пользователей" и хотитеотслеживать, инициализирована ли определенная позиция.
Если только:
Вы создаете не массив User, а массив "Pointer to User" (или другую ссылку типаauto_ptr).Таким образом, имеет смысл сказать, что определенный элемент является «нулевым»;или
Ваша «инициализация» означает не создание экземпляра объекта, а явное действие инициализации (например, выполнение метода init () экземпляра User).Таким образом, имеет смысл сказать, что определенный элемент «не инициализирован».
(Прежде всего, когда вы пишете C ++, я рекомендую вам использовать std :: vector, а не массив. Однако я использую массив в этом ответе, чтобы придерживаться вашего вопроса)
Для случая 1 это строго вперед, просто используйте NULL (избегайте использования 0, потому что, хотя NULL определенкак 0 в большинстве систем, использование NULL на самом деле делает код более читабельным и более переносимым):
User* user[10] = {NULL}; // array of 10 pointer-to-User
user[0] = new User(...);
assert (user[0] != NULL);
assert (user[1] == NULL);
Для случая 2 у вас есть много других вариантов, например, сохранение другого логического массива для сохранения «инициализированного»пометить, или иметь обертку над пользователем для такого дополнительного флага, или просто добавить такой флаг в свой класс пользователя и т. д.
например,
User user[10]; // 10 element of User, which all of them is already created
//assume you have extra flag in User
user[0].init(...); // explicity do some init work on user[0]
//......
if (! user[5].isInitialized()) {
user[5].init(...);
}
(честно говоря, я думаю, что случай 2 не совсемчто вы ищете)