У меня есть класс «Маршрут», в котором хранится связанный список. Объекты класса «Маршрут» хранятся в векторах (а иногда и удаляются).C++ вектор объектов, содержащий динамически выделенную память - «erase» не работает
Без конструктора/деструктора копирования и т. Д. программа работает нормально, но я хочу избежать утечек памяти, поэтому мне нужен конструктор/деструктор копирования и т. д. После создания этих векторных «стираний», кажется, удаляет из вектора неправильные элементы (т. е. последний элемент, а не n-й элемент). Иногда элементы стираются из векторов, хотя ни один из них не должен быть удален. Что-то не так с конструктором конструктора/деструктора/копии? (Каждый раз, когда объект Route копируется, чтобы быть привязанным к вектору, создается совершенно новая версия связанного списка с использованием новой памяти - с помощью функции copyLinkedList).
`Route::Route(int destnAddr, MovePtr routeToDestn) :
destinationAddress(destnAddr){
firstMove = copyLinkedList(routeToDestn);
}
Route::Route(const Route& _route){
destinationAddress = _route.destinationAddress;
firstMove = copyLinkedList(_route.firstMove);
}
Route& Route::operator=(const Route& _route){
Route newRoute(_route);
return newRoute;
}
Route::~Route(){
MovePtr toDelete = firstMove;
while(firstMove != NULL){
firstMove = firstMove->next_move;
delete toDelete;
toDelete = firstMove;
}
}
MovePtr Route::copyLinkedList(MovePtr listHead) {
MovePtr newListHead = NULL;
if (listHead == NULL){
return newListHead;
}
newListHead = new Move;
newListHead->router_address = listHead->router_address;
newListHead->next_move = copyLinkedList(listHead->next_move);
return newListHead;
}`
Не говоря уже о том, что это приводит к бесконечной рекурсии. –
Да, переписал перегруженный оператор присваивания - по какой-то причине я думал, что векторы используют только конструктор/деструктор копии. благодаря! – hassapikos