По крайней мере, IMO, если вы настаиваете на том, чтобы делать это вообще, вы обычно должны делать это по-другому, что-то вроде:
class bool_array {
bool *data_;
size_t width_;
// no assignment or copying
bool_array &operator=();
bool_array(bool_array const &);
public:
bool_array(size_t x, size_t y) width_(x) {
data_ = new bool[x*y];
std::fill_n(data_, x*y, false);
}
bool &operator()(size_t x, size_t y) {
return data_[y+width_+x];
}
~bool_array() { delete [] data_; }
};
Это может быть приукрашено (например, использование прокси для обеспечения константности), но общая идея остается: 1) выделить ваши bool
s в одном блоке, и 2) поместить их в класс, и 3) перегрузить оператор для поддержки достаточно чистого индексирования данных.
Вам также следует рассмотреть возможность использования std::vector<bool>
. В отличие от других экземпляров std::vector
, это не контейнер (как стандарт определяет этот термин), что может сбивать с толку - но то, что вы создаете, также не является контейнером, так что, очевидно, для вас это не имеет значения.