CDCatalogue::CDCatalogue() //creates array of size 4
{
maxsize=4;
numcds = 0;
cds = new CD[maxsize];
}
Я хочу это скопировать cat
в новый массив с двойным размером cat
:
CDCatalogue::CDCatalogue(const CDCatalogue& cat)
{}
Как предлагалось ранее, я бы предпочел использовать std :: vector, который предлагает функцию-член resize () именно для того, что вам нужно. Это, наверное, то, что вы ищете.
Если по какой-то причине вы не можете использовать векторы, возможно, более простой подход, чем использование «конструктора двойного копирования», будет иметь функцию «doubleSize», которую вы можете вызвать сразу после копирования конструкции.
Предполагая, что в вашем примере в вопросе maxsize и cds объявлены как члены класса, вы можете сделать что-то вроде этого:
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 ++. Вместо этого вам нужно создать новый массив нового желаемого размера, скопировать элементы старого массива в новый, а затем освободить память старого массива. Обратите внимание, что последняя половина элементов нового массива будет инициализирована с неопределенными значениями.
Других решений пока нет …