Разбираюсь в чужом коде. Насколько правомерно так инициировать:
DataArray<unsigned char> *m_Control[CONTROLINDEX_COUNT] = {0};
Вообще почему не так например:
DataArray<unsigned char> *m_Control[CONTROLINDEX_COUNT] = {0,0,0,0,0,0};
где
#pragma once
/// \brief A class template for a simple array with a fixed size.
template <class T> class DataArray
{
public:
DataArray(unsigned int size);
~DataArray();
T *data();
T operator[](unsigned int index);
unsigned int getSize() const;
protected:
T *array; ///< Pointer to the array holding the data
unsigned int size; ///< Size of the array (Number of variables of type T)
};
/// \brief Initializes the data array.
/// \param size Size of the data array.
template <class T> DataArray<T>::DataArray(unsigned int size)
{
this->array = new T[size];
for (unsigned int index = 0; index < size; ++index)
this->array[index] = 0;
this->size = size;
}
/// \brief Deletes the allocated data array.
template <class T> DataArray<T>::~DataArray()
{
delete[] this->array;
}
/// \brief Returns a pointer to the array data.
/// \return The internal data array.
template <class T> T *DataArray<T>::data()
{
return this->array;
}
/// \brief Returns array element when using square brackets.
/// \return The array element.
template <class T> T DataArray<T>::operator[](unsigned int index)
{
return this->array[index];
}
/// \brief Gets the size of the array.
/// \return The size of the command in bytes.
template <class T> unsigned int DataArray<T>::getSize() const
{
return this->size;
}введите сюда код
и
enum ControlIndex {
CONTROLINDEX_SETOFFSET,
CONTROLINDEX_SETRELAYS,
CONTROLINDEX_SETVOLTDIV_CH1,
CONTROLINDEX_SETVOLTDIV_CH2,
CONTROLINDEX_SETTIMEDIV,
CONTROLINDEX_ACQUIIRE_HARD_DATA,
CONTROLINDEX_COUNT
};
Все совершенно правомерно.
Не совсем ясно, зачем вы поставили на свой вопрос тэг [C], но в языке С инициализатор { 0 }
является фактически идиоматическим универсальным нулевым инициализатором, который может использоваться для инициализации нулем/нулями чего угодно.
Ваш второй вариант совершенно не приемлем. Вся идея использования именованной константы CONTROLINDEX_COUNT
заключается в том, чтобы абстрагироваться от ее фактического значения, а ваше {0,0,0,0,0,0}
достигает прямо противоположного эффекта. Здесь должно быть именно { 0 }
, а ни в коем случае не {0,0,0,0,0,0}
.
Более того, в С++ коде в данном случае даже уместнее было бы написать
DataArray<unsigned char> *m_Control[CONTROLINDEX_COUNT] = {};
Эффект такого инициализатора в данном случае не отличается от { 0 }
, т.е. получается массив нулевых указателей.
P.S. Определение шаблонного класса DataArray
тут ни к чему, ибо рассматриваемый массив содержит просто указатели.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пошагово и простым языком, если не трудно
Работая с мапингом под виндой, столкнулся с такой проблемой, не получается зарезервировать буфер под MapViewOfFileEx
Например проверять объект при очищении контейнера:
У меня аварийно завершается программа после того как я открываю диалог повторноПочему так происходить ? Может это быть из-за пустого Деструктор?...