Я хочу расширить свой массив на один при вызове функции addBranch, а затем добавить новый объект Branch в эту расширенную пустую область, и я пытаюсь предотвратить код из утечки памяти. Я думал, что делаю правильно, но я застрял в этой функции.ошибка при расширении массива: оператор не найден, который принимает
это дает мне ошибку "binary '=': оператор не найден, который принимает правый операнд типа 'Branch *' (или нет приемлемого преобразования)". Мне нужна помощь, назначая последний элемент новому объекту Branch, который не будет удален после уничтожения функции. Я просто знаком с C++, поэтому могут быть некоторые большие ошибки. Мне не разрешено использовать векторы и т. Д.
// ------- Adds a branch to system -------- //
void BankingSystem::addBranch(const int id, const string name){
if(isBranchExisting(id)){
cout << "\n\tBranch " << id << " already exists. Please try it with another id number.";
}
else if(!isBranchExisting(id)){
Branch* tempArray = new Branch[cntAccounts];
for(int i = 0; i<cntAccounts; i++){
tempArray[i] = allBranches[i];
}
delete[] allBranches;
allBranches = new Branch[cntAccounts+1];
for(int i = 0; i<cntAccounts; i++){
allBranches[i] = tempArray[i];
}
allBranches[cntAccounts] = new Branch(id, name); // error at this line
}
}
Just наводке кодирования: если вы создаете '' tempArray' с новой ветви [cntAccounts + 1] ', то вы может скопировать все элементы из 'allBranches' в' tempArray', затем добавить новый элемент в конец 'tempArray', затем' delete [] allBranches', затем 'allBranches = tempArray'. Это требует копирования элементов только один раз, а не дважды. Лучше, однако, как говорили другие, использовать 'std :: vector', что делает все это для вас. –
Мне нужно удалить 'tempArray' после выполнения' allBranches = tempArray'? –
Нет, не удаляйте его. Он указывает на ваши текущие данные, как и 'allBranches'. Если вы удалите его ** оба указателя ** указывают на мусор. –