C ++: массив с нестандартным размером в классе - PullRequest
2 голосов
/ 21 декабря 2010

Я хочу сделать это:

class Graphic
{
    int *array;
    Graphic( int size )
    {
        int temp_array[size];
        array = temp_array;
        glGenTextures( size, array );
    }
}

Будет ли это работать?И даже если это будет, есть ли лучший способ сделать это?

Спасибо.

Ответы [ 2 ]

8 голосов
/ 21 декабря 2010

Использование new означает, что вы должны запомнить delete [] это; использование зависимых от компилятора массивов переменного размера означает, что вы теряете переносимость.

Гораздо лучше использовать вектор .

#include <vector>

class Graphic
{
    std::vector<int> array;
    Graphic( int size )
    {
        array.resize(size);
        glGenTextures( size, &array[0] );
    }
}

Язык гарантирует, что векторные элементы будут смежными в памяти, поэтому здесь можно безопасно &array[0].

1 голос
/ 21 декабря 2010

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

array = new int[size]

И затем не забудьте удалить его.Обычно это делается в деструкторе следующим образом:

delete[] array
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...