Как было предложено, прежде чем я бы предпочел использовать зЬй :: вектор, который предлагает изменить размер (член) функцию для того, что вам нужно. Вероятно, это то, что вы ищете.
Если по какой-либо причине вы не можете использовать векторы, возможно, более простой подход, чем наличие «конструктора копий дубликатов», будет иметь функцию «doubleSize», которую вы можете вызвать сразу после копирования с помощью конструкции.
Предполагая, что в вашем примере в вопросе, MAXSIZE и дисков объявлены в качестве членов класса, вы могли бы сделать что-то вроде этого:
CDCatalogue::doubleSize() {
unsigned int oldMaxSize = maxsize;
maxsize *= 2; // You might want to keep an eye for overflows here
CD *oldCds = cds;
cds = (CD*) new CD[maxsize];
std::copy(oldCds, oldCds+oldMaxSize, cds);
delete[] cds;
}
Обратите внимание, что это не так просто, как с помощью векторов, потому что есть нет «изменить размер» для динамических распределений C++. Вместо этого вам нужно создать новый массив нового желаемого размера, скопировать элементы старого массива в новый и затем выпустить память старого массива. Обратите внимание, что последняя половина элементов нового массива будет инициализирована неопределенными значениями.
Простой ответ. Используйте 'std :: vector' и снимите код, который вы сейчас делаете. –
PaulMcKenzie