У меня есть глобальный массив в моей программе, и я хочу иметь возможность изменять его размер хотя бы один раз в начале с помощью функции. В основном так:
pthread_t threadsArray[10]; //default size: 10
void SetMaxThreads(unsigned int count) {
pthread_t threadsArray[count];
}
Что бы вы мне посоветовали? Как я мог это сделать?
Я бы предложил использовать стандартный контейнер std::vector
вместо массива.
Например
std::vector<pthread_t> threadsArray( 10 ); //default size: 10
void SetMaxThreads(unsigned int count) {
threadsArray.resize( count );
}
Вы можете объявить динамический массив. Это можно сделать двумя разными способами. Вы можете использовать std::vector
или использовать указатели. Векторная документация. Пример с помощью указателей:
pthread_t *threadsArray; // no default size
void SetMaxThreads(unsigned int count) {
delete [] threadsArray;
threadsArray = new pthread_t[count];
}
Изменить: как отмечалось в некоторых комментариях, безопаснее использовать std::unique_ptr<pthread_t[]>
вместо указателей массива. std::unique_ptr
Документация
std::unique_ptr<pthread_t[]>
будет лучше, чем необработанный указатель владения.
new
threadsArray
, threadsArray
не будет указывать на допустимую память). Есть причина, почему использование сырых указателей не рекомендуется ...