我创建了一个存储链表的类'Route'。"路由"类的对象存储在向量中(有时被删除)。
如果没有复制构造函数/析构函数/等,程序工作正常,但我想避免内存泄漏,所以我需要一个复制构造函数/析构函数等。自从创建这些以来,矢量"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;
}`
你在operator=
所做的事情没有任何意义。应将参数的状态分配给当前对象。相反,您可以创建一个新对象并返回对该对象的悬空引用。
尝试在谷歌上搜索"赋值运算符"或"特殊成员函数"或"三法则"以获取详细信息。