Перезаписать массив большим массивом

0

У меня есть глобальный массив в моей программе, и я хочу иметь возможность изменять его размер хотя бы один раз в начале с помощью функции. В основном так:

pthread_t threadsArray[10]; //default size: 10

void SetMaxThreads(unsigned int count) {
    pthread_t threadsArray[count];
}

Что бы вы мне посоветовали? Как я мог это сделать?

Теги:
arrays

2 ответа

3
Лучший ответ

Я бы предложил использовать стандартный контейнер std::vector вместо массива.

Например

std::vector<pthread_t> threadsArray( 10 ); //default size: 10

void SetMaxThreads(unsigned int count) {
    threadsArray.resize( count );
}
  • 0
    Хм, я никогда не работал с векторами, не могли бы вы привести пример? Должен ли я много менять свой код?
  • 0
    @Forivin Смотрите мой обновленный пост.
0

Вы можете объявить динамический массив. Это можно сделать двумя разными способами. Вы можете использовать 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 Документация

  • 0
    std::unique_ptr<pthread_t[]> будет лучше, чем необработанный указатель владения.
  • 0
    Это не исключительное исключение (если выбрасывает new threadsArray , threadsArray не будет указывать на допустимую память). Есть причина, почему использование сырых указателей не рекомендуется ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню