簡體   English   中英

對象的C ++向量,包含動態分配的內存-“擦除”無效

[英]c++ vector of objects, containing dynamically allocated memory - 'erase' does not work

我創建了一個存儲路由列表的“路由”類。 “ Route”類的對象存儲在向量中(有時被刪除)。

沒有復制構造函數/析構函數/等。 該程序運行良好,但是我想避免內存泄漏,因此我需要一個復制構造函數/析構函數等。由於創建了這些構造函數,因此矢量“擦除”似乎從矢量中刪除了錯誤的元素(即,最后一個元素,而不是第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;
}`

您在operator=所做的一切毫無意義。 您應該將參數的狀態分配給當前對象。 相反,您創建一個新對象並返回對其的懸掛引用。

嘗試在Google上搜索“賦值運算符”或“特殊成員函數”或“三個規則”以了解詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM