Правильный путь заключается в использовании std::vector
или std::string
в зависимости от конкретного использования массива - пусть C++ обрабатывать распределения для вас.
Если вы должны использовать new
, вам придется перераспределять и копировать память. Эта простая шаблонная функция показывает вам основу:
template <typename T>
T *GrowArray(T *oldArray, size_t oldCount, size_t newCount) {
T *newArray = new T[newCount];
if (oldArray) {
std::copy(oldArray, oldArray + std::min(oldCount, newCount), newArray);
delete[] oldArray;
}
return newArray;
}
Обратите внимание, что в большинстве реализаций и в большинстве случаев использования, это, по существу, что делает realloc()
, минус безопасность типа. Если это выглядит неэффективно для вас, хорошо, realloc()
, вероятно, не делает ничего лучше.
Не существует аналогичной операции с 'realloc' с системой' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' по умолчанию ''. Если вам нужно использовать 'new', вы, вероятно, действительно хотите' std :: vector'. Дубликат: http://stackoverflow.com/questions/1179669/realloc-function-that-would-work-for-memory-allocated-using-new-instead-of-reallo – birryree
Основываясь на [этом вопросе] (http: //stackoverflow.com/questions/1179669/realloc-function-that-would-work-for-memory-allocated-using-new-instead-of-reallo) не существует. – BlackBear