Как объявить массив, как свойство класса? C++

Изучаю С++ и наткнулся на проблему. В C++ нельзя объявить массив заранее, не указывая/не зная его размера в элементах. Я создал класс, который в процессе работы с ним использует массив, причем данный массив - это его приватное свойство. При попытке указать массив, как свойство класса, не указывая его размер, копмилятор, конечно же, выдает ошибку.

Следует ли использовать в данном случае вектор из STL или можно выкрутиться при помощи "обычных" стредств?


Ответы (1 шт):

Автор решения: Harry

Вот пример реализации с динамическим массивом. Главное - не забыть написать все необходимые конструкторы/деструкторы/присваивания (перемещающие я не написал, сделайте сами), чтоб они были глубокими, а не поверхностными...

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;
    }
};
→ Ссылка