对象的c ++向量,包含动态分配的内存 - 'erase'不起作用

时间:2014-11-22 14:10:26

标签: c++ vector linked-list dynamic-memory-allocation

我创建了一个班级'路线'它存储链表。 '路线'的对象class存储在向量中(有时删除)。

没有复制构造函数/析构函数/等。该程序工作正常,但我想避免内存泄漏,所以我需要一个复制构造函数/析构函数等。自创建这些,矢量'擦除'似乎从向量中删除了错误的元素(即最后一个元素,而不是第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;
}`

1 个答案:

答案 0 :(得分:1)

你在operator=做的事情没有任何意义。您应该将参数的状态分配给当前对象。相反,您创建一个新对象并返回一个悬挂引用。

尝试谷歌搜索“赋值运算符”或“特殊成员函数”或“三条规则”以获取详细信息。