2014-09-14 3 views
0

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

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

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

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

ответ

3

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

Например

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

void SetMaxThreads(unsigned int count) { 
    threadsArray.resize(count); 
} 
+0

Хм, я никогда не работал с векторами, мог бы вы привести пример? Должен ли я изменить свой код? – Forivin

+0

@Forivin Смотрите мое обновленное сообщение. –

0

Вы можете объявить динамический массив. Это можно сделать двумя разными способами. Вы можете использовать std::vector или использовать указатели. Vector Documentation. Пример с использованием указателей:

pthread_t *threadsArray; // no default size 

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

Edit: как некоторые комментарии отметил, что безопаснее использовать std::unique_ptr<pthread_t[]> вместо указателей массива. std::unique_ptr Documentation

+0

'std :: unique_ptr ' будет лучше, чем исходный указатель владения. – Jarod42

+0

Это не исключение (если 'new' throws,' threadsArray' не укажет на действительную память). Существует причина, почему использование исходных указателей не рекомендуется ... –