Инициализация частного массива указателей на ноль

0

Я работаю над проектом C++, который в основном использует пару классов для имитации розничной среды; пока все прошло гладко, но я долгое время не использовал C++, и я немного озадачен тем, как этот массив должен работать.

//Customer.h
private:
    std::array< CustomerOrder *, 3 > orderList;

В принципе, массив объявляется в файле Customer.h как закрытый, но файлы Customer.h и Customer.cpp также предоставляют метод

addOrder(CustomerOrder *c)

для добавления указателей CustomerOrder (CustomerOrder - еще один класс) в массив. По моему опыту, логика метода довольно проста: используйте цикл for, чтобы найти первый индекс, содержащий нулевой указатель, а затем вставьте указатель в этот индекс.

Проблема заключается в том, что сначала нужно инициализировать массив нулевыми указателями, и я не уверен, как или в каком файле я должен это делать. Поскольку массив является приватным, я бы предположил, что я должен инициализировать его в файле.h, используя что-то в соответствии с

for(size_t i = 0; i < orderList.size(); ++i)
    orderlist[i] = nullptr;

или

orderlist[3] = {nullptr}

Могу ли я/Должен ли я сделать это в файле.h? И существует ли более надежный способ инициализации массива?

Для справки, я использую стандарт C++ 11, если это имеет значение.

Теги:
arrays
pointers
private

2 ответа

1
Лучший ответ

Если этот элемент данных является приватным, его можно инициализировать либо в конструкторе, либо в некоторой функции-члене, которая будет инициализировать его.

Для того, чтобы установить все элементы массива nullptr вы можете использовать функцию - член fill класса std::array.

Например

orderlist.fill( nullptr );
1

Используйте конструктор, и исполняемый код не должен находиться в h файле.
И: Не делайте orderlist[3] = {nullptr} на 3-мерном массиве.
Он имеет только индексы 0,1,2. Цикл намного лучше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню