Как объявить массив, как свойство класса? C++
Изучаю С++ и наткнулся на проблему. В C++ нельзя объявить массив заранее, не указывая/не зная его размера в элементах. Я создал класс, который в процессе работы с ним использует массив, причем данный массив - это его приватное свойство. При попытке указать массив, как свойство класса, не указывая его размер, копмилятор, конечно же, выдает ошибку.
Следует ли использовать в данном случае вектор из STL или можно выкрутиться при помощи "обычных" стредств?
Ответы (1 шт):
Вот пример реализации с динамическим массивом. Главное - не забыть написать все необходимые конструкторы/деструкторы/присваивания (перемещающие я не написал, сделайте сами), чтоб они были глубокими, а не поверхностными...
class WithArray
{
public:
WithArray(unsigned int N = 1):N(N),data(new int[N]){}
~WithArray() { delete[] data; }
WithArray(const WithArray& w):N(w.N),data(new int[w.N])
{
for(unsigned int i = 0; i < N; ++i) data[i] = w.data[i];
}
WithArray& operator = (const WithArray& w)
{
if (this != &w)
{
WithArray tmp(w);
swap(tmp);
}
return *this;
}
private:
unsigned int N;
int * data;
void swap(WithArray& w)
{
unsigned int tmpN = N;
N = w.N; w.N = tmpN;
int * tmpD = data;
data = w.data; w.data = tmpD;
}
};